- 相关命令
-
python3 manage.py makemigrations
根据模型生成相关迁移文件 -
python3 manage.py migrate
根据迁移文件,将表结构更新到数据库中,并在Django中带的migrations数据表中更改数据库记录
-
- 字段
-
常用的字段
- 自增长字段
- models.AutoField()
- models.BigAutoField()
- 二进制数据
- models.BinaryField()
- 布尔型
- 允许为空 models.BooleanField()
- 不允许为空 models.NullBooleanField()
- 整型
- 5个字节的正整数models.PositiveSmallIntegerField()
- 6个字节的整数
models.SmallIntegerField() - 11个字节的整数
models.IntegerField() - 20个字节的整数
models.BigIntegerField()
- 字符串类型
- varchar
models.CharField(max\_length=100) - longtext
models.TextField()
- varchar
- 时间日期类型
- 年月日
models.DateField() - 年月日时分秒
models.DateTimeField() - 一段时间,在数据库中是int类型,底层是 Python timedelta 实现
models.DurationField()
- 年月日
- 浮点型
- models.FloatField()
- 可以指定整数多少位,小数多少位
models.DecimalField()
- 其它字段
- 邮箱
models.EmailField() - models.ImageField()
- models.FileField()
- models.FilePathField()
- models.URLField()
- models.UUIDField()
- IP地址,可以是IPV4,也可以是IPV6
models.GenericIPAddressField()
- 邮箱
- 自增长字段
- 关系型字段
- 一对一
models.OneToOneField(Model) - 多对一
models.ForeignKey(Model) - 多对多
models.ManyToManyField(Model)
- 一对一
- 字段类型参数
- 所有字段都有的参数
- db_column='name'
- primary_key=True
- verbose_name='别名或者注释'
- unique=True
- null=True,blank=True
- db_index=True 给表单建立索引
- help_text='' 表单中显示帮助信息
- editable=False 表单不可编辑
- 个别字段才有的参数
- 给CharField 指定最大长度 max_length=100
- 时间
- unique_for_date=True
- unique_for_month=True
- auto_now=True 更新时间
- auto_now_add=True 新增时间
- 浮点型 Decimal
- max_digits=4 表示一共有多少位数
- decimal_places=2 表示小数有多少位
- 关系型字段的参数
- related_name='name' 反向查询时候可能会用到
- on_delete=value
value的值- CASCADE:删除引用的对象时,也删除引用它的对象
- PROTECT:禁止删除引用的对象。SQL等价物:RESTRICT。
- SET_NULL:将引用设置为NULL(要求字段可以为空),当字段设置null=True才可以使用
- SET_DEFAULT:设置默认值。只有当字段设置了default参数时才能使用 SQL等价物:SET DEFAULT。
- SET(value 或者 函数返回值):设置给定值。这个不是SQL标准的一部分,完全由Django处理。
- DO_NOTHING:SQL等价物:NO ACTION。
- 自关联
- 写法一:
modles.ForeignKey('self',verbose_name='自关联') - 写法二:
modles.ForeignKey('Model',verbose_name='自关联')
- 写法一:
- 所有字段都有的参数
-
常用的字段
-
元数据,Meta类定义了一些元数据的信息,Meta类的字段如下:
- db_table
- ordering 列表或者元组形式
- verbose_name 别名
- verbose_name_plural 别名复数
- abstract 不同步到数据库,只是用于被别的类继承
- permissions 定义权限
- managed 是否按照Django规则管理模型类 默认是True
- unique_together=()/((),()) 对应MySQL中的联合唯一约束
- app_label 指定模型属于哪个应用(如果在settings里面已经注册过应用的话,就不用写这个字段了)
- db_tablespace 定义数据库表空间的名字
-
Django 数据表操作
- 更改数据表
- 删除数据库表步骤
- 删除对应的模型类代码
- 删除migrationd文件夹下面的模型类
- 删除Django的migrations表中对应的记录
- 删除数据库表
- 删除数据库表步骤
- 导入数据
- Django shell 导入数据 引入模型 调用模型对象的save方法
- 自己定义一个脚本批量导入数据
- fixtures Django serialization -> model 保存
- python3 manage.py dumpdata > data.json
- python3 manage.py loaddata data.json
- 通过数据库客户端或则source文件导入数据
- 导出数据
- python3 manage.py dumpdata > data.json
- pycharm 导出
- mysqldump 导出
-
数据操作
- 返回QuerySet 的 API
- all(),filter(),order_by(),exclude(),reverse(),distinct()
- extra(),defer(),only() 实现字段别名,排除一些字段,选择一些字段
- values(),values_list() 获取字典或者元组形式的结果集
- dates(),datetimes() 根据时间日期获取查询集
- union(),intersection(),difference() 并集,交集,差集;MySQL Innodb 只支持并集
- select_related() 一对一、多对一查询优化,prefetch_related() 一对多、多对多查询优化。 反向查询
- annotate() 使用聚合计数,求和,平均数,raw() 执行原生SQL
annotate()对分组后的结果进行统计 - Model.objects.get().子表的表名 _set.all()
- 不返回QuerySet 的 API
- 获取对象 get(),get_or_create(),first(),last(),latest(),earliest(),in_bulk()
- 创建对象 create(),bulk_create(),create_or_update() 创建,批量创建,创建或更新
- 更新对象 update(),update_or_create() 更新,更新或创建
- 删除对象 delete() 使用filter 过滤
- 其它操作 exists(),count(),aggregate() 判断是否存在,统计个数,聚合
aggregate() 是对这个数据表中的数据进行统计
- 自定义聚合查询
- 返回QuerySet 的 API
-
F对象和Q对象
- F对象:操作字段的数据
- Q对象:结合 AND , OR ,NOT, | , ~ , & 实现复杂的查询
- 更改数据表
注: 本文知识点是根据自己的项目经验及慕课网的教学视频整理所得,
如需转载请注明出处:https://www.cnblogs.com/zhuchenglin/p/10223596.html