Django中的ORM
对象关系映射(Object Relational Mapping,简称ORM)是通过应用形容对象和数据库之间映射的元数据,将面向对象语言程序中的对象主动长久化到关系数据库中。
参考文档:https://docs.djangoproject.co...
Django数据库配置
# settings文件下DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", # 这里能够依据理论状况批改,譬如换成oracle、PostgreSQL等 "NAME": "数据库名称", "USER": "用户名", "PASSWORD": "明码", "HOST": "数据库拜访地址", "POST": 3306 # Mysql数据库默认应用3306 }}
建设model
model蕴含了存储的数据的重要字段和行为。
一个模型映射到一个数据库表。
model示例
from django.db import modelsclass Students(models.Model): name = models.CharField(max_length=30) # CharField为字段类型,max_length 为字段参数选项 age = models.IntegerField() gender = models.BooleanField() cs = models.ForeignKey('ClassInfo', on_delete=models.DO_NOTHING)class ClassInfo(modes.Modell): title = models.CharField(max_length=30)
执行,生成数据表
python manage.py makemigrationspython manage.py migrate
常用字段
类型 | 形容 |
---|
AutoField | 主动增长的IntegerField,通常不必指定,不指定时Django会主动创立属性名为id的主动增长属性。 |
BooleanField | 布尔字段,值为True或False。 |
NullBooleanField | 反对Null、True、False三种值。 |
CharField(max_length=最大长度) | 字符串。参数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]) | 日期。1)参数auto_now示意每次保留对象时,主动设置该字段为以后工夫,用于"最初一次批改"的工夫戳,它总是应用以后日期,默认为false。2) 参数auto_now_add示意当对象第一次被创立时主动设置以后工夫,用于创立的工夫戳,它总是应用以后日期,默认为false。3)参数auto_now_add和auto_now是互相排挤的,组合将会产生谬误。 |
TimeField | 工夫,参数同DateField。 |
DateTimeField | 日期工夫,参数同DateField。 |
FileField | 上传文件字段。 |
ImageField | 继承于FileField,对上传的内容进行校验,确保是无效的图片。 |
字段选型
罕用选项
选项名 | 形容 |
---|
default | 默认值。设置默认值。 |
primary_key | 若为True,则该字段会成为模型的主键字段,默认值是False,个别作为AutoField的选项应用。 |
unique | 如果为True, 这个字段在表中必须有惟一值,默认值是False。 |
db_index | 若值为True, 则在表中会为此字段创立索引,默认值是False。 |
db_column | 字段的名称,如果未指定,则应用属性的名称。 |
null | 如果为True,示意容许为空,默认值是False。 |
blank | 如果为True,则该字段容许为空白,默认值是False。 |
关系表选项
ForeignKey 外键关联
个别把ForeignKey字段设置在 '一对多'中'多'的一方。
ForeignKey能够和其余表做关联关系,,也能够和本身做关联关系。
选项名 | 形容 |
---|
to | 设置要关联的表 |
to_field | 设置要关联的表的字段 |
related_name | 反向操作时,应用的字段名,用于代替原反向查问时的'表名_set' |
related_query_name | 反向查问操作时,应用的连贯前缀,用于替换表名 |
on_delete | 当删除关联表中的数据时,以后表与其关联的行的行为。 |
db_constraint | 是否在数据库中创立外键束缚,默认为True。 |
选项名 | 形容 |
---|
models.CASCADE | 删除关联数据,与之关联也删除 |
models.DO_NOTHING | 删除关联数据,引发谬误IntegrityError |
models.PROTECT:删除关联数据,引发谬误ProtectedError
models.SET_NULL:删除关联数据,与之关联的值设置为null(前提FK字段须要设置为可空)
models.SET_DEFAULT:删除关联数据,与之关联的值设置为默认值(前提FK字段须要设置默认值)
models.SET|删除关联数据,. 与之关联的值设置为指定值或者可执行对象的返回值,设置:models.SET(值)
ManyToManyField多对多
用于示意多对多的关联关系,在数据库中通过第三张表来建设关联关系。
选项名 | 形容 |
---|
to | 设置要关联的表 |
related_name | 反向操作时,应用的字段名,用于代替原反向查问时的'表名_set' |
related_query_name | 反向查问操作时,应用的连贯前缀,用于替换表名 |
symmetrical | 仅用于多对多自关联时,指定外部是否创立反向操作的字段。默认为True。 |
through | 在应用ManyToManyField字段时,Django将主动生成一张表来治理多对多的关联关系,也反对手动创立第三张表,此时就须要通过through来指定第三张表的表名。 |
through_fields | 设置关联的字段。 |
db_table | 默认创立第三张表时,数据库中表的名称。 |
DatetimeField、DateField、TimeField特有参数
选项名 | 形容 |
---|
auto_now_add | 配置auto_now_add=True,创立数据记录的时候会把以后工夫增加到数据库。 |
auto_now | 配置上auto_now=True,每次更新数据记录的时候会更新该字段。 |