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通过exifread模块获得图片exif信息的方法
Mar 16 Python
Python自动发邮件脚本
Mar 31 Python
Python 查找字符在字符串中的位置实例
May 02 Python
对python过滤器和lambda函数的用法详解
Jan 21 Python
python定时按日期备份MySQL数据并压缩
Apr 19 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
Oct 28 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
通过实例解析Python调用json模块
Dec 11 Python
如何基于python操作excel并获取内容
Dec 24 Python
python各层级目录下import方法代码实例
Jan 20 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
Feb 20 Python
Python基于数列实现购物车程序过程详解
Jun 09 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
杏林同学录(六)
2006/10/09 PHP
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
PHP简单创建压缩图的方法
2016/08/24 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
Python生成随机MAC地址
2015/03/10 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
Python实现注册、登录小程序功能
2018/09/21 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Python PyQt5整理介绍
2020/04/01 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
大学生职业生涯规划书模板
2014/01/18 职场文书
四年大学生活的自我评价范文
2014/02/07 职场文书
安全宣传标语
2014/06/10 职场文书