django 中的聚合函数,分组函数,F 查询,Q查询


Posted in Python onJuly 25, 2019

先以mysql的语句,聚合用在分组里,

对mysql中groupby 是分组

每什么的时候就要分组,如 每个小组,就按小组分,

group by 字段 having 聚合函数

#举例 :求班里的平均成绩, select Avg(score) from stu

在django中

聚合 是aggreate(*args,**kwargs),通过QuerySet 进行计算。做求值运算的时候使用

分组 是annotate(*args,**kwargs),括号里是条件,遇到 每什么的时候就要分组,

先从models 导入要用到的函数

from django.db.models import Min,Avg,Max,Sum

def aggregate(request):

  #求所有书籍的平均价格
  ret11 = Book.objects.all().aggregate(Avg("price"))
  # print(ret11)#{'price__avg': 51.975}

  #求所有书籍的最高价
  ret12 = Book.objects.all().aggregate(MaxPrice=Max('price'))
  # print(ret12)#{'MaxPrice': Decimal('100.00')}

  #egon 出版过书籍的最高价格
  p = Book.objects.filter(authors__name='egon').aggregate(Max('price'))

  print(p)#{'price__max': Decimal('100.00')}



  #分组 annotate()
  #每一个作者出版过的书的最高价 ,
  #解析,按照作者的名字分组,就要用到values,显示的是字段的名字,

  b1 = Book.objects.values('authors__name').annotate(Max('price'))

  print(b1)
  #<QuerySet [{'authors__name': 'egon', 'price__max': Decimal('100.00')},
      # {'authors__name': 'alex', 'price__max': Decimal('100.00')},
      # {'authors__name': 'yuan', 'price__max': Decimal('100.00')},
      # {'authors__name': 'oldboy', 'price__max': Decimal('100.00')}]># 四个作者都关联了同一本书,而这本书又是最高价
#每个出版社出版的最低价格的书籍

b2 = Book.objects.values('publish__name').annotate(Min('price'))
print(b2)
#<QuerySet [{'publish__name': '北京出版社', 'price__min': Decimal('100.00')},
# {'publish__name': '河下出版社', 'price__min': Decimal('45.00')},
# {'publish__name': '清华出版社', 'price__min': Decimal('39.90')},
# {'publish__name': '人民出版社', 'price__min': Decimal('23.00')}]>

F Q 查询

F,主要是做查询

Q查询 可以做组合条件的查询 & 是 与 ,|(管道符) 或,~ 非

def FAndQ(request):
 
  #给每本书涨价10元,
  #用sql语句写 update book set price=price+10
 
  #F,主要是做查询
  # Book.objects.all().update(price=F('price')+10)
 
  #查询书籍是富开头,并且价格大于30的书籍 ,逗号 可以做 与 的关系查询
  b4 = Book.objects.filter(title__startswith="富",price__gt=30)
  # print(b4)#<QuerySet [<Book: 富爸爸>]>
 
 
  #Q查询 可以做组合条件的查询 & 是 与 ,|(管道符) 或,~ 非
 
  ##查询书籍是富开头,或价格大于30的书籍
  b5 = Book.objects.filter(Q(title__startswith="富") | Q(price__gt=60))
  # print(b5)
  #<QuerySet [<Book: Linux>, <Book: 项塔兰>, <Book: 追风筝的人>, <Book: 富爸爸>]>
 
  #组合查询,以富开头,价格大于60 ,或者id大于5的书籍
  b6 = Book.objects.filter(Q(title__startswith="富")&Q(price__gt=60)|Q(id__gt=5))
  #print(b6)#<QuerySet [<Book: 富儿子>]>
  #
  #查询条件如果不加Q,就要放到最后面,
  b7 = Book.objects.filter(Q(price__gt=60) | Q(id__gt=5),title__startswith="富")
  # print(b7)
 
  # ~ 取反的意思
  b8 = Book.objects.filter(Q(title__startswith="富") & ~Q(price__gt=60) | Q(id__gt=5))
  print(b8)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python库urllib与urllib2主要区别分析
Jul 13 Python
Python用GET方法上传文件
Mar 10 Python
python中assert用法实例分析
Apr 30 Python
python cx_Oracle模块的安装和使用详细介绍
Feb 13 Python
详解django.contirb.auth-认证
Jul 16 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 Python
Python正则表达式如何匹配中文
May 27 Python
Python 字典中的所有方法及用法
Jun 10 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
Jul 25 #Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 #Python
Python 3.8 新功能全解
Jul 25 #Python
python3.7 的新特性详解
Jul 25 #Python
python issubclass 和 isinstance函数
Jul 25 #Python
django的分页器Paginator 从django中导入类
Jul 25 #Python
python threading和multiprocessing模块基本用法实例分析
Jul 25 #Python
You might like
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
Javascript 布尔型分析
2008/12/22 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
2017/01/13 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
Python三级目录展示的实现方法
2016/09/28 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
Java如何格式化日期
2012/08/07 面试题
什么是makefile? 如何编写makefile?
2013/01/02 面试题
自荐信如何“自荐”
2013/10/24 职场文书
好军嫂事迹材料
2014/01/15 职场文书
收银员岗位职责
2014/02/07 职场文书
教师个人自我鉴定
2014/02/08 职场文书
市场专员岗位职责
2014/02/14 职场文书
联欢晚会主持词
2014/03/25 职场文书
市场总经理岗位职责
2014/04/11 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android