django模型系统(二)
一、常用的模型字段类型
官方文档地址:https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types
1.什么是字段类型?
2.常用字段类型映射关系
二、字段的常用参数
官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-options
补充:verbose_name:注释
三、常用查询
①.django通过模型类上的管理器来构造QuerySet。
② QuerySet 表示数据库中对象的集合。
等同于select 语句。 惰性的
获取sql语句
案例:
③first() 获取第一条 返回的是对象
④last() 获取最后一条 返回的也是一个对象
思考:排序规则? 默认通过主键。通过_meta 设置
⑤get(**kwargs) 根据给定的条件,获取一个对象,如果有多个对象符合,则会报错
⑥ all() 获取所有记录 返回的是queryset
⑦filter(**kwargs) 根据给定的条件,获取一个过滤后的queryset,可查多个条件。
⑧ exclude(**kwargs) 跟filter使用方法一致,作用与其相反,它是排除。
⑨多条件的OR连接 用到Q对象,django.db.models.Q
10. values(*fields(字段)可接收多个参数) 返回一个queryset,返回一个字典列表,而不是数据对象。
11.only(*fields) 返回querySet ,返回对象列表,注意only一定包含主键字段
12.defer(*fields) 返回一个QuerySet,作用和only相反
13. order_by(*fields) 根据给定的字段来排序 默认是顺序,字段名前加上 ‘-’代表反序
14.切片 和python的列表切片用法相似,不支持负索引,数据量大时不用步长
*** 切片过后,不再支持,附加过滤条件与排序
- 常用查询条件 filter,exclude, get
15. exact
16.iexact(不区分大小写的匹配)
17.contains icontains(不区分大小写) 18.in
19. range
20.gt(大于) gte(大于等于)
21. lt(小于) lte(小于等于)
22. startswith (以什么开头) istartswith(大小写不敏感)
23. endswith(以什么结束) iendswith (大小写不敏感)
24. isnull True False 对应 sql语句中的 IS NULL IS NOT NULL
四、聚合
- count
from django.db.models import Count, Avg, Max, Min, Sum
通过queryset的aggregate方法
Student.objects.aggregate(age_avg=Avg('age')) # 计算平均年龄
Student.objects.filter(sex=1).aggregate(age_avg=Avg('age'))也是可以的,Max,Min,Sum跟图中用法一致
- 平均值 Avg
- 分组,聚合
结合 Values,annotate 和聚合方法一起实现
查询男生有几个,女生有几个