聚合查询、分组查询、F&Q查询
一、聚合查询和分组查询
1、aggregate(*args, **kwargs):
通过对QuerySet进行计算,返回一个聚合值的字典。aggregate()中每个参数都指定一个包含在字典中的返回值。即在查询集上生成聚合。
from django.db.models import Avg,Min,Sum,Max # 从整个查询集生成统计值。比如,你想要计算所有在售书的平均价钱。Django的查询语法提供了一种方式描述所有图书的集合。 Book.objects.all().aggregate(Avg('price')) # {'price_avg':34.35}
# aggregate()子句的参数描述了我们想要计算的聚合值,在这个例子中,是Book模型中price字段的平均值 # aggregate()是QuerySet的一个终止子句,意思是说,它返回一个包含一些键值对的字典。键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。如果你想要为聚合指定一个名称,可以向聚合子句提供它: Book.objectsaggregate(average_price=Avg('price'))
# {'average_price':34.35} # 如果你也想知道所有图书价格的最大值和最小值,可以这样查询:
Book.objects.aggregate(Avg('price')),Max('price'),Min('price'))
# {'price_avg':34.35,'price_max':Decimal('81,20'),'price_min'}:Decimal('12.99')}
2、annotate(*args,**kwargs):
可以通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合。
# 查询shan出的书总价格
Book.ojcets.filter(authors__name='shan').values('title') # 查询出shan写的所有书的书名
Book.objects.filter(authors__name='shan').aggragare(Sum('price')) # 查询各个作者出的书的总价格,这里就涉及到了分组,分组条件是authors_name
Book.objects.values('authors__name').annotate(Sum('price')) # 查询各个出版社最便宜的书价是多少
Book.objects.values('publisher__name').annotate(Min('price'))
二、F查询和Q查询
仅仅靠单一的关键字参数查询已经很难满足查询要求。此时Django为我们提供了F和Q查询:
# F 使用查询条件的值,专门取对象中某列值的操作 from django.db.models import F models.Tb1.objects.update(num=F('num')+1) # Q 构建搜索条件
from django.db.models import Q # 1 Q对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询
q1 = models.Book.objects.filter(Q(title__startswith='P')).all() # 书的标题是以P开头的对象 # 2、可以组合使用&,|操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。
Q(title__startswith="P") | ~Q(title__startswith='J') # 3、Q对象可以用~操作符放在前面表示否定,也可允许否定与不否定形式的组合
Q(title__startswith='P') | ~Q(pub_date__year=2018) # 4、应用范围: Book.objects.get(
Q(title__startswith='P'),
Q(pub_date=date(2018,10,12)) | Q(pub_date=date(2018,5,21))
) # 5、Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面。
# 正确:
Book.objects.get(
Q(pub_date=date(2018,10,12)) |
Q(pub_date=date(2018,5,21)),title__startswith='P')
# 错误:
Book.objects.get(
question__startswith='P',
Q(pub_date=date(2018,10,12)) | Q(pub_date=date(2018,5,21))
聚合查询、分组查询、F&Q查询的更多相关文章
- Django框架08 /聚合查询、分组、F/Q查询、原生sql相关
Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 目录 Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 1. 聚合查询 2. 分组 3. F查询和Q查询 4. o ...
- orm中的聚合函数,分组,F/Q查询,字段类,事务
目录 一.聚合函数 1. 基础语法 2. Max Min Sum Avg Count用法 (1) Max()/Min() (2)Avg() (3)Count() (4)聚合函数联用 二.分组查询 1. ...
- Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...
- Django day08 多表操作 (五) 聚合,分组查询 和 F,Q查询
一:聚合,分组查询 二:F, Q查询
- Django orm进阶查询(聚合、分组、F查询、Q查询)、常见字段、查询优化及事务操作
Django orm进阶查询(聚合.分组.F查询.Q查询).常见字段.查询优化及事务操作 聚合查询 记住用到关键字aggregate然后还有几个常用的聚合函数就好了 from django.db.mo ...
- Django ORM (四) annotate,F,Q 查询
annotate 可以通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合. from django.shortcuts import re ...
- Django之ORM操作(聚合 分组、F Q)
Django之ORM操作(聚合 分组.F Q) 聚合 aggregate()是QuerySet的一个终止子句,也就是说,他返回一个包含一些键值对的字典,在它的后面不可以再进行点(.)操作. 键的名 ...
- 分组\聚合\F\Q查询
一.分组和聚合查询 1.aggregate(*args,**kwargs) 聚合函数 通过对QuerySet进行计算,返回一个聚合值的字典.aggregate()中每一个参数都指定一个包含在字典中的 ...
- $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数
一.聚合函数 from django.db.models import Avg,Sum,Max,Min,Count,F,Q #导入 # .查询图书的总价,平均价,最大价,最小价 ...
- python-day71--django多表双下划线查询及分组聚合及F/Q查询
#====================================双下划线的跨表查询===============# 前提 此时 related_name=bookList 属性查询: # 查 ...
随机推荐
- python 生成器 的send
>>> def f(): c=yield 5 print c d=yield c+5 print d >>> b=f() >>> b.send(N ...
- python大法好——python的下载与安装、第一个程序
吃够了java的苦,所以python好. 打今天起,要走python了. 首先呢,学习python需要python环境.和一款得心应手的集成开发环境. python环境下载:https://mirro ...
- android stuido的代码排版的快捷建CTRL+ALT+L
CTRL+ALT+L 需要主要留意的地方是QQ的与其冲突的 我将qq的中快捷方式给去除
- 飞鸽传书linux进程退出不彻底
问题描述: 飞鸽传书linux版本(QIpmsg)是有问题的. 在ubuntu14.04上运行的时候,没有任务栏图标,点击关闭也不能退出进程,端口仍然占用,无法再次运行. 这个问题截至1.2.1412 ...
- day02-格式化输出
python格式化字符串有%和{}两种 字符串格式控制符. 字符串输入数据格式类型(%格式操作符号) %%百分号标记%c字符及其ASCII码%s字符串%d有符号整数(十进制)%u无符号整数(十进制)% ...
- Raft 为什么是更易理解的分布式一致性算法(转)
一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜 ...
- bat脚本基础教程
bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序排列而形成的集合,运行在windows命令行环境上.本文主要介绍bat脚本基础语法,希望完成本文内容学习之后具备基础的bat脚本开发能 ...
- maven ,添加加密算法,使用
1:消息摘要:(数字指纹):既对一个任意长度的一个数据块进行计算,产生一个唯一指纹.MD5/SHA1发送给其他人你的信息和摘要,其他人用相同的加密方法得到摘要,最后进行比较摘要是否相同. MD5(Me ...
- 如何进行SQL排序
order by 语法如下: SELECT "栏位名" FROM "表格名" [WHERE "条件"] ORDER BY "栏位名 ...
- [C语言]使用函数
------------------------------------------------------------------------------------------ //函数原型声明: ...