Django框架中ORM示意图如下:
Django ORM框架的功能:
- 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库
- 根据设计的模型类自动生成数据库中的表格
- 通过方便的配置就可以进行数据库的切换
1. Django数据库配置
Django默认使用sqlite3数据库,当然也支持其他数据库:postgresql、mysql、oracle等。
Django配置数据库方法:修改项目配置文件setting.py内部的DATABASE项的值
- ENGINE:数据库类型,可选项如下:
- django.db.backends.sqlite3(默认)
- django.db.backends.postgresql
- django.db.backends.mysql
- django.db.backends.oracle
- NAME:数据库名称
若使用SQlite,则数据库为一个文件,则NAME是此文件的绝对路径,包括文件名。默认值 os.path.join(BASE_DIR, 'db.sqlite3') 将会把数据库文件储存在项目的根目录
若使用其他数据库,需要添加额外字段值:USER、PASSWORD、HOST、PORT等
注意:
- sqlite之外的其他数据库,需要自己先创建数据库,且保证数据库用户有创建数据库的权限。
- 项目需要安装连接MySQL的第三方包:python2(mysql-python)、python3(pymysql)
- python3安装后需要在项目目录下__init__.py文件内,添加下面代码:
import pymysql
pymysql.install_as_MySQLdb()
2. 模型字段属性和选项
2.1 模型类属性命名限制
1. 不能为python保留关键字
2. 不允许使用连续下划线!!(因为Django查询数据的条件格式有双下划线)
3. 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法:属性名=models.字段类型(选项)
2.2 字段类型
模型中每一个属性都应该是某个Field类的实例, Django提供一下字段类型:
字段类型 | 描述 |
---|---|
AutoField | 自动增长的IntegerField:通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性(主键) |
BooleanField | 布尔字段:值为True或False |
NullBooleanField | 支持Null、True、False三种值 |
CharField(max_length=x) | 字符串:参数max_length表示最大字符个数 |
TextField | 大文本字段:一般超过4000个字符时使用 |
IntegerField | 整数 |
DecimalField(max_digits=None, decimal_places=None) | 十进制浮点数:参数max_digits表示总位数,decimal_places表示小数位数 |
FloatField | 同上 |
DateField([auto_now=False, auto_now_add=False]) | 日期:auto_now表示每次保存对象自动设置为当前时间,默认为false(最后修改时间戳);auto_now_add表示对象第一次被创建自动设置当前时间(创建时间戳),默认为false(两参数相互排斥) |
TimeField | 时间:参数同DateField |
DateTimeField | 日期时间:参数同DateField |
FileField | 上传文件 |
ImageField | 上传图片:继承于FileField,对上传的内容进行校验,确保是有效的图片 |
2.3 字段选项
选项就是给数据库字段进行约束,Django提供一下选项:
选项名 | 描述 |
---|---|
default | 默认值:设置默认值 |
primary_key | 主键:True,该字段会成为模型的主键字段;默认值是False,一般作为AutoField的选项使用 |
unique | 字段唯一性:True, 该字段在表中必须有唯一值;默认值是False |
db_index | 索引:值为True, 则在表中会为此字段创建索引;默认值是False |
db_column | 字段名称:未指定,则使用类属性的名称 |
null | 空值:True,表示允许null;默认值是False |
blank | 空白:True,则该字段允许为空白,默认值是False |
注意:
- null是数据库范畴的概念,blank是后台管理页面表单验证范畴的
- 如果一个字段设置为 blank=True ,在进行表单验证时,接收的数据该字段值允许为空,而设置为 blank=False 时,不允许为空
3. 数据模型查询
3.1 MySQL日志文件
mysql日志文件:mysql.log
日志文件记录MySQL数据库的操作记录,默认情况下mysql不产生日志文件,需要修改mysql的配置文件,步骤如下:
1. 使用下面的命令打开mysql的配置文件,去除68,69行的注释
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
2. 重启mysql服务,就会产生mysql日志文件
sudo service mysql restart
3. 打开MySQL的日志文件。
mysql日志文件位置:/var/log/mysql/mysql.log
使用下面的命令可以实时查看mysql的日志文件:
sudo tail -f /var/log/mysql/mysql.log
3.2 查询函数
之前学习MySQL时,MySQL查询语句提供很多高级用法:where子句、排序、聚合函数、分组、连接查询、子查询等。Django通过模型类.objects属性提供以下几个函数,实现数据的查询:
函数名 | 功能 | 返回值 | 说明 |
---|---|---|---|
all | 返回模型类对应数据表中的所有数据 | QuerySet类型 | 查询集(列表形式,内部为查询出来的模型类对象) |
get | 返回表中满足条件的一条(只能有一条数据) |