聚合函数:
- from django.db.models import Avg,Count,Max,Min,Sum
- from django.db import connection
求表中一个字段的平均值:
result = 表名. objects.aggregate(Avg("字段名")) #聚合函数要放在 aggregate,annotate 方法里面, Avg 求平均值
result 的结果是一个字典, 他的 key 是表名__聚合函数名,{"表名__聚合函数名":"xxx"} 可以自己定义他的 key:
result = 表名. objects.aggregate(avg = Avg("字段名"))
此时 result 的结果就是 {"avg":"xxx"}
print(connection.queries) #打印 SQL 语句, aggregate 返回结果是个字典, 不能直接使用 query
多表联合求多个分类平均值:
results = 表名. objects.annotate(Avg("关联字段名"))
- for result in results:
- print(result.avg)
求表中有多少条数据:
result = 表名. objects.aggregate(nums = Count("字段名"))
result = 表名. objects.aggregate(nums = Count("字段名",distinct=True))
#distinct=True 去掉重复数据
求表中最大值, 最小值:
result = 表名. objects.aggregate(nums = Max("字段名"),Min("字段名"))
求表中的总和:
result = 表名. objects.aggregate(nums = Sum("字段名"))
F 表达式:
给字段每个值都加 10
from django.db.models import F
表名. objects.update(xxx =F("字段名")+10)
查看一张表中两个字段相同值的数据
results = 表名. objects.filter(字段名 1 =F("字段名 2"))
- for result in results:
- print(result. 字段名 1,result. 字段名 2)
Q 表达式:~Q 取反
from django.db.models import Q
在表中查询字段名 1=xx 或者字段名 2=yy 的数据
results = 表名. objects.filter(Q(字段名 1=xx) | Q(字段名 2=yy))
在表中查询字段名 1=xx 并且字段名 2=yy 的数据
results = 表名. objects.filter(Q(字段名 1=xx) & Q(字段名 2=yy))
在表中查询字段名 1=xx 并且字段名 2 不包含 yy 的数据
results = 表名. objects.filter(Q(字段名 1=xx) &~Q(字段名 2__icontains="yy"))
filter 是将满足的拿出来, exclude 是将满足的过滤掉, annotate 给模型添加新的字段, 比如图书表中查询的时候添加一个作者字段, 可以是 F/Q / 或者函数等
results = 表名. objects.filter(字段名 1__get=xxx).filter(~Q(字段名 1=xx))
# 或者
results = 表名. objects.filter(字段名 1__get=xxx).exclude(字段名 1=xx))
# 找出字段名大于等于 xxx 再过滤字段名不等与 xx 的数据
order_by 指定将查询结果进行排序
# 根据创建时间正续排序
result = 表名. objects.order_by("创建时间字段")
# 根据创建时间倒续排序
result = 表名. objects.order_by("- 创建时间字段")
# 根据字段名称排序
result = 表名. objects.order_by("字段")
# 创建时间相同, 再根据字段排序
result = 表名. objects.order_by("创建时间字段","字段") #这个注意点是不能出现多个 order_by, 否则会打乱之前的排序
values 用来指定在提取数据
result = 表名. objects.values("字段名 1","字段名 2") #结果是一个字典
result = 表名. objects.values("字段名 1","字段名 2", 自定义字段 = F("关联表__字段")) #查询出字段名 1, 字段名 2 和关联表中的关联字段
result = 表名. objects.values() #没有传值进去的话 会返回所有字段形成字典
来源: http://www.bubuko.com/infodetail-3384819.html