乐趣区

关于django:三Django-Web开发之ORM

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 models

class 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 makemigrations
python 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。
  • on_delete 可选项
选项名 形容
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,每次更新数据记录的时候会更新该字段。
退出移动版