ORM多表操作
API
| 函数 | 说明 |
|---|---|
| all() | 查询所有结果 |
| filter(**kwargs) | 包含了与所给筛选条件相匹配的对象 |
| get(**kwargs) | 返回与所给筛选条件相匹配的对象,返回结果有且只有一个, 如果符合筛选条件的对象超过一个或者没有都会抛出错误。 |
| exclude(**kwargs) | 它包含了与所给筛选条件不匹配的对象 |
| order_by(*field) | 对查询结果排序 用法:order_by (“price”) DESC 降序 |
| reverse(): | 对查询结果反向排序 |
| count() | 返回数据库中匹配查询(QuerySet)的对象数量 |
| first() | 返回第一条记录 |
| last() | 返回最后一条记录 |
| exists() | 如果QuerySet包含数据,就返回True,否则返回False 相当于limit 1(用途查询这个表中是否有值) |
| values(*field) | 用法:Book.objects.all.values(‘title’,‘price’) 返回值是<queryset[{‘title’:‘aa’,‘pirce’:12},{}] |
| values_list(*field): | 用法:Book.objects.all.values_list(‘title’,‘price’) 返回值是<queryset[(‘aa’,12),(‘bb’,33)] |
| distinct() | 从返回结果中剔除重复纪录 用法:Book.objects.all.values(‘title’,‘price’).distinct() 错误用法 Book.objects.all.distinct() 因为id不相同,其他相同,无法去重 |
模糊查询
| |
外键的定义
| |
on_delete的参数
CASCADE:这就是默认的选项,级联删除,你无需显性指定它。PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True,null=True,定义该字段的时候,允许为空。SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。SET(): 自定义一个值,该值只能是对应的实体了DO_NOTHING:不采取行动。如果您的数据库后端强制执行参照完整性,会造成IntegrityError,除非您手动将SQL 约束ON DELETE添加到数据库字段。
一对多之对象查询
| |
多对多对象添加
| |
聚合查询与分组查询
聚合查询:
aggregate(*args, **kwargs)
| |
aggregate()是QuerySet的一个终止子句,意思是说,它返回一个包含一些键值对的字典。键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。如果你想要为聚合值指定一个名称,可以向聚合子句提供它。
分组查询
annotate(*args, **kwargs)
- 表单模型.objects.values(“group by 分组字段”).annotate(聚合函数(‘聚合字段’))
F查询
- Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。
Q查询
- filter() 等方法中的关键字参数查询都是一起进行“AND” 的。 如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象