Django-Models
- Django 对各种数据库提供了很好的支持,Django为这些数据库提供了统一的调用API,可以根据不同的业务需求选择不同的数据库。
如需了解更多,请访问: https://www.emperinter.info/2022/05/29/django-models/
ORM
- 概述
- 对象-映射-模型
- 任务
- 根据对象的类型生成表结构
- 将对象、列表的操作转换为sql语句
- 将SQL语句查询的结果转换为对象、列表
- 优点
- 极大的减轻了开发人员的工作量,不需要面对因数据库的变更而修改代码
流程
配置数据库
- 在
__init__.py
文件中添加选定的数据库Package。
import pymysql
pymysql.version_info = (2,0,3,"final",0)
pymysql.install_as_MySQLdb()
- 在
settings.py
文件中修改数据库配置。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'sunck', # 数据库名
'USER': 'sunk', # 数据库用户名
'PASSWORD': 'sunk', # 数据库密码
'HOST': 'localhost', # 数据库主机
'PORT': '3306', # 数据库端口
}
}
在models.py 添加模型类
- 一个模型类都在数据库中对应一张表
定义模型
模型、属性、表、字段间的关系
- 一个模型类在数据库中对应一张表
- 模型类中定义的属性,对应模型对照表中的字段
定义属性
概述
- Django根据属性的类型确定以下信息
- 当前选择的数据库支持字段的类型
- 渲染管理表单时使用的默认html控件
- 在管理站点最低限度的验证
- Django会为表增加自动增加的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则Django不会再生成默认的主键列。
- 属性命名限制
- 不能是Python的保留关键字(遵循标识符命名规则)
- 由于Django的查询方式,不允许使用连续的下划线
库
- 定义属性时,需要字段类型,字段类型被定义再
django.db.modles.fields
目录下,为了方便使用,被导入到django.db.modles
中 - 使用方式:
- 导入
from django.db import models
- 通过
modles.Field
创建字段类型的对象,赋值给属性
- 导入
逻辑删除
- 对于重要数据都做逻辑删除 ,不能做物理删除,实现方法是定义
isDelete
属性,类型为BooleanField
,默认值为False
。
字段类型
字段类型 | 说明 |
---|---|
AutoField | 一个根据实际ID自动增长的IntergerField,通常不指定,如果不指定一个主键字段将自动添加到模型中 |
CharField(max_length=字符长度) | 字符串,默认的表单样式是TextInput |
TextField | 大文本字段,一般超过4000字节使用,默认的表单控件是textArea |
IntegerField | 整数 |
DecimalFiled(max_digits=None,decimal_places=None) | 使用Python的Decimal实例表示的十进制浮点数,max_digits表示位数总数,decimal_places表示小数点后的数字位数。[[精确的浮点运算-Decimal]] |
FloatField | 用Python的Float实例来表示的浮点数 |
BooleanField | true/false字段,此字段的默认表单控制是CheckboxInput |
NullBolleanField | 支持null、true、false三种值 |
DateField([auto_now=False,auto_now_add=False]) | 使用Python的Datetime.date实例表示的日期,auto_now表示每次保存对象是,自动设置该字段为当前时间,用于“最后一次修改”的时间戳,它总是使用当前日期,默认为False。auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前时间,默认为False。说明:该字段默认对于表单控件是一个TextField,在管理员站点添加了一个JavaScript写的日历控件,和一个“Today”的快捷按钮,包含了一个额外的invalid_date错误消息键。注意:auto_now_add、auto_now、defalut这些设置是相互排斥的,他们之间的任何组合将会发生错误的结果。 |
TimeField | 使用Python的datetime,datetime实例表示的日期和时间,参数同DateField |
FiledField | 一个上传文件的字段 |
ImageField | 继承了FileField的所有属性和方法,但对上传的对象进行校验,确保它是一个有效的image |
字段选项(字段参数)
- 概述:
- 通过字段选项,可以实现对字段的约束
- 在字段对象是通过关键字参数指定
- null
- 如果为True,Django将空值已NULL存储到数据库中,默认是False
- blanke
- 如果为True,则该字段允许为空白,默认值是False
- 注意:
- null是数据库范畴的概念,blank是表单验证范畴的
- db_column
- 字段的名称,如未指定,则使用属性的名称
- db_index
- 若值为True,则在表中会为此字段创建索引
- defalut
- 默认值
- primary_key
- 若为True,则该字段会成为模型的主键字段
- unique
- 若为True,则该字段的值必须唯一
关系
- 分类
- ForeignKey:一对多,将字段定义在多的端中
- ManyToManyField: 多对多,将字段定义在两端中
- OneToOneField:一对一,将字段定义在任意一端中。
- 用一访问多:
- 格式: 对象.模型类小写_set
- 示例:grade.students_set
- 用一访问一:
- 格式:对象.模型类小写
- 示例:grade.students
- 访问id:
- 格式:对象.属性_id
- 示例:student.sgrade_id
创建模型类
如需了解更多,请访问: https://www.emperinter.info/2022/05/29/django-models/