优势:开发效率高
劣势:损失一部分性能
ORM语法:
1.操作数据表 增删改
2.操作数据行 增删改查
Django使用ORM连接数据库
1. 先自己创建一个数据库
2. 告诉Django连哪个库
3. 创建表
app/models.py写一个类
注意:要继承mdoels.Model
4. 使用pymysql这一类模块去真正连接MySQL
Python2:mysqlDB
python3:pymysql
在项目文件夹下的__init__.py文件中写下:
import pymysql
pymysql.install_as_MySQLdb()
5. 两个命令
python manage.py makemigrations # 用小本本记录models.py中的改动
python manage.py migrate # 把改动翻译成SQL语句,然后执行
对应关系:
类 --> 表
属性 --> 字段
对象 --> 数据行
操作数据行的语法:
1. 增加
Student.objects.create(name="lucifer") -> 创建了一个Student对象
insert into student(name) values("lucifer");
2. 删除
obj.delete()
3. 改
obj.name = "新的值"
obj.save() 提交到数据库
4. 查
1. 获取单个数据(对象)
Student.objects.get(id=1)
2. 获取所有
Student.objects.all()
使用ORM连接MySql的步骤:
- 手动创建数据库
- 在settings.py里面配置一下数据库连接信息
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'book', 'USER':'root', 'PASSWORD':'123456', 'HOST':'127.0.0.1', 'PORT':3307 } }
- 在和settings.py的同级目录下的__init__.py文件中,告诉Django用pymysql代替MySQLdb来连接数据库
import pymysql pymysql.install_as_MySQLdb()
- 在app/models.py中,定义类,类一定要继承models.Model
class books(models.Model): id=models.AutoField(primary_key=True) title=models.CharField(max_length=64,null=False,unique=True) publisher=models.ForeignKey(to='publisher')
- 执行两条命令(执行位置:项目根目录)
python manage.py makemigrations #将model.py的改动记录在app/migrations/文件中 python migrate #将改动翻译成sql,去数据库中执行
自定义char类型
class FixedCharField(models.Field): """ 自定义的char类型的字段类 """ def __init__(self, max_length, *args, **kwargs): super().__init__(max_length=max_length, *args, **kwargs) self.length = max_length def db_type(self, connection): """ 限定生成数据库表的字段类型为char,长度为length指定的值 """ return 'char(%s)' % self.length class Class(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=25) # 使用上面自定义的char类型的字段 cname = FixedCharField(max_length=25)