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对象