详情:
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()