详情:
https://docs.djangoproject.com/en/3.0/ref/models/querysets/
https://docs.djangoproject.com/zh-hans/3.0/topics/db/queries/
查询的对象有两种一种是直接查询项目object, 一种是查询QuerySet。
QuerySet特点:
- 惰性查询
- 可迭代
- 可切片
- 可索性,但是索引不能为负数
常见查询:
get(**kwargs)
返回object, 事实具体查询,如果查出多个object或者没有查到都会报错,可以用异常捕捉进行调试all()
查询所有结果filter(**kwargs)
返回QuerySet, 条件查询exclude(**kwargs)
与filter相反,返回条件不同的结果order_by(*fileds)
对查询结果排序reverse()
对查询结果反向排列distinct()
返回结果中剔除重复记录values(*fileds)
返回一个valueQuerySet, 内容以为字典的形式values_list(*fileds)
返回alueQuerySet, 内容以元组的形式count()
返回QuerySet中查询匹配的数目first()
返回第一条记录,等价于[:1][0]last()
返回最后一条记录, 等价于[::-1][0]exists()
如果QuerySet中有数据返回True, 否则返回False
多表查询:
- __xx, 可以使用__xxx使用双下划线对属性进行直接显示, 可用内连接与外连接。
- _set, 提供某一个对象访问set的数据表,是主键类关联外键类型。ForeignKey. 主键就是多对1的那个1, 外键就是那个多。
聚集查询和分组查询:
annotate(*args, **kwargs)
, 以QuerySet集合对象添加注释, 通过集合中每个关联对象集合。用于分组查询aggregate(*args, **kwargs)
, 返回一个聚合值的字典。
聚集查询和分组查询都在from django.db.models import Count
中
1 | from django.db.models import Sum |
此外还一颗使用原生sql语句进行查询:
详情:
https://docs.djangoproject.com/zh-hans/3.0/ref/models/querysets/#extra
https://docs.djangoproject.com/zh-hans/3.0/ref/models/querysets/#raw
比如extra(), 和raw()