【数据库】树形数据组织架构下的封锁并发控制,B树索引并发访问控制,树协议原理及案例分析
【1】多表操作
【2】聚合查询(aggregate)
【3】分组查询(annotate)
- annotate
- filter在annotate前:表示过滤,where条件
- values在annotate前:表示分组的字段,如果不写表示按整个表分组
- filter在annotate后:表示 having条件
- values在annotate后:表示取字段---》只能取分组字段和聚合函数字段
【4】F查询
【5】Q查询
【6】其它字段和字段参数
【6.1】字段参数:ORM字段参数
- null
- unique
- 如果设置为unique=True 则该字段在此表中必须是唯一的
- db_index
- db_index=True 则代表着为此字段设置索引
- default
- DateField和DateTimeField
- auto_now_add=True:新增会把当前时间存入
- default=datatime.datatime.now
- auto_now=True,每次更新数据记录的时候会更新该字段
- verbose_name
- blank
- editable
- help_text
- choices
- Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
- 路由写法:get_字段名_display()
【6.2】ForeignKey属性
- to
- to_field
- related_name
- 反向操作时,使用的字段名,用于代替原反向查询时的’表名_set’
- related_query_name
- on_delete:当删除关联表中的数据时,当前表与其关联的行的行为
- models.CASCADE
- models.DO_NOTHING
- 删除关联数据,引发错误IntegrityError
- models.PROTECT
- 删除关联数据,引发错误ProtectedError
- models.SET_NULL
- 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
- models.SET_DEFAULT
- 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
- models.SET:删除关联数据
- 与之关联的值设置为指定值,设置:models.SET(值)
- 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
- db_constraint
- 是否在数据库中创建外键约束,默认为True
- db_constraint=False 在数据库中不建立外键约束
- 虽然不建立数据库外键约束---》但是orm查询,继续用
- ManyToManyField
- 用于表示多对多的关联关系。在数据库中通过第三张表来建立关联关系
- to
- related_name
- related_query_name
- through
- 在使用ManyToManyField字段时,Django将自动生成一张表来管理多对多的关联关系
- 但我们也可以手动创建第三张表来管理多对多关系,此时就需要通过through来指定第三张表的表名
- through_fields
- db_table
【7】中间表创建的三种方式
第一种:自动创建
第二种:半自动创建
第三种,纯手动创建