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

先以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)

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

(0)

相关推荐

  • django的聚合函数和aggregate、annotate方法使用详解

    支持聚合函数的方法: 提到聚合函数,首先我们要知道的就是这些聚合函数是不能在django中单独使用的,要想在django中使用这些聚合函数,就必须把这些聚合函数放到支持他们的方法内去执行.支持聚合函数的方法有两种,分别是aggregate和annotate,这两种方法执行的原生SQL以及结果都有很大的区别,下面我们以实例操作的方式一一介绍: # 示例模型: class Author(models.Model): """作者模型""" name =

  • django 按时间范围查询数据库实例代码

    从前台中获得时间范围,在django后台处理request中数据,完成format,按照范围调用函数查询数据库. 介绍一个简单的功能,就是从web表单里获取用户指定的时间范围,然后在数据库中查询此时间范围内的数据. 数据库里的model举例是这样: class book(models.Model): name = models.CharField(max_length=50, unique=True) date = models.DateTimeField() def __unicode__(s

  • Django框架多表查询实例分析

    本文实例讲述了Django框架多表查询.分享给大家供大家参考,具体如下: 多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案. ForeignKey 来自Django官方文档的模型示例: from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() class Author(mod

  • Django 表单模型选择框如何使用分组

    起步 Django 表单中有两种字段类型可以使用选择框: ChoiceField 和 ModelChoiceField . 对于 ChoiceField 的基本使用是: class ExpenseForm(forms.Form): CHOICES = ( (11, 'Credit Card'), (12, 'Student Loans'), (13, 'Taxes'), (21, 'Books'), (22, 'Games'), (31, 'Groceries'), (32, 'Restaura

  • Django objects的查询结果转化为json的三种方式的方法

    第一种方式: 利用seriallizers 这个方法,官网的解释说:将复杂的数据结构变成json.xml或者其他的格式 import json from django.core import serializers def area2(request,id): data = {} province = serializers.serialize("json",AreaInfo.objects.filter(parea__isnull=True)) data["data&quo

  • Django中对数据查询结果进行排序的方法

    在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序. 那么,使用 order_by() 这个方法就可以搞定了. >>> Publisher.objects.order_by("name") [<Publisher: Apress>, <Publisher: O'Reilly>] 跟以前的 all() 例子差不多,SQL语句里多了指定排序的部分: SELECT id, name, address, city,

  • Django之无名分组和有名分组的实现

    在Django 2.0版本之前,在urls,py文件中,用url设定视图函数 urlpatterns = [ url(r'login/',views.login), ] 其中第一个参数是正则匹配,如下代码,输入http://127.0.0.1:8000/login,出现的是login页面,但是输入login2,出现的还是login页面,这是因为Django会将匹配成功的返回,不会继续往下匹配 urlpatterns = [ url(r'login',views.login), url(r'log

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

    先以mysql的语句,聚合用在分组里, 对mysql中groupby 是分组 每什么的时候就要分组,如 每个小组,就按小组分, group by 字段 having 聚合函数 #举例 :求班里的平均成绩, select Avg(score) from stu 在django中 聚合 是aggreate(*args,**kwargs),通过QuerySet 进行计算.做求值运算的时候使用 分组 是annotate(*args,**kwargs),括号里是条件,遇到 每什么的时候就要分组, 先从mo

  • django中F与Q查询的使用

    目录 F查询 Q查询 事务 其他鲜为人知的操作 Django ORM执行原生SQL QuerySet方法大全 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值. 示例1: 查询出卖出数大于库存数的商品 from django.db.models import F ret1=mode

  • 对Django中的权限和分组管理实例讲解

    权限 Django中内置了权限的功能.他的权限都是针对表或者说是模型级别的.比如对某个模型上的数据是否可以进行增删改查操作.他不能针对数据级别的,比如对某个表中的某条数据能否进行增删改查操作(如果要实现数据级别的,考虑使用django-guardian).创建完一个模型后,针对这个模型默认就有四种权限,分别是增/删/改/查.可以在执行完migrate命令后,查看数据库中的auth_permission表中的所有权限. 字段: content_type_id:是一个外键,参考表是django_co

  • Python模型聚合查询\Q查询\F查询\分组查询操作技巧解析

    目录 模型中的一些查询操作: 1.聚合查询:aggregate()是QuerySet 的一个终止子句 2.Q查询: 如果你需要执行更复杂的查询(例如OR语句) 3.F查询: (查询的是一整列数据!) 4.分组查询 4.1一对多关系 4.2多对多关系 模型中的一些查询操作: 1.聚合查询:aggregate()是QuerySet 的一个终止子句 它返回一个包含一些键值对的字典 from movie.models import User from django.db.models import Co

  • 如何在Django中使用聚合的实现示例

    在本文中,我想向您介绍如何在Django中使用聚合,聚合的含义是"内容相关项的集合,以便它们可以显示或链接到".在Django中,我们使用的情况例如: 用于在Django模型的数据库表中查找列的"最大值","最小值". 用于基于列在数据库表中查找记录的"计数". 用于查找一组相似对象的"平均值"值. 还用于查找列中的值的总和. 在大多数情况下,我们对数据类型为"整数","浮点数

  • Django中Aggregation聚合的基本使用方法

    Django 的 filter.exclude 等方法使得对数据库的查询很方便了.这在数据量较小的时候还不错,但如果数据量很大,或者查询条件比较复杂,那么查询效率就会很低. 提高数据库查询效率可以通过原生 SQL 语句来实现,但是它的缺点就是需要开发者熟练掌握 SQL.倘若查询条件是动态变化的,则编写 SQL 会更加困难. 对于以便捷著称的 Django,怎么能忍受这样的事.于是就有了 Aggregation聚合 . 聚合最好的例子就是官网给的案例了: # models.py from djan

  • django中操作mysql数据库的方法

    目录 1.准备工作(django连接数据库) 2.django操作数据库(ORM) 2.1 ORM简介 2.2 创建表和字段 2.3 字段的增删改查 2.4 单表数据的增删改查 2.4.1单表数据的查询 2.4.2单表数据的增加 2.4.3单表数据的修改 2.4.4单表数据删除 2.4.5补充13条单表查询 2.4.6 神奇的双下划线查询 2.5 多表数据操作 2.5.1 orm创建表关系 2.5.2 一对多关系的增删改 2.5.3 多对多关系的增删改 2.5.4 多表的查询操作 2.6 字段类

  • Django中F函数的使用示例代码详解

    F()函数 F()函数的导入 from django.db.models import F 为什么要使用F()函数? 一个 F()对象代表了一个model的字段值或注释列.使用它就可以直接参考model的field和执行数据库操作而不用再把它们(model field)查询出来放到python内存中. 开发个人博客时,统计每篇文章浏览量的逻辑通常是这样写的: post = Post.objects.get(...) post.views += 1 post.save() 上面的语句已经相当简短了

  • Python DataFrame.groupby()聚合函数,分组级运算

    pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个键(可以是函数.数组或DataFrame列名)拆分pandas对象.计算分组摘要统计,如计数.平均值.标准差,或用户自定义函数.对DataFrame的列应用各种各样的函数.应用组内转换或其他运算,如规格化.线性回归.排名或选取子集等.计算透视表或交叉表.执行分位数分析以及其他分组分析. groupby分组函数: 返回值:返回重构格式的DataFrame,特别注意,grou

  • django框架F&Q 聚合与分组操作示例

    本文实例讲述了django框架F&Q 聚合与分组操作.分享给大家供大家参考,具体如下: F 使用查询条件的值,专门取对象中某列值的操作,可以对同一个表中的两个列进行比较 from django.db.models import F ret=models.Book.objects.filter(count__lt=F('sale')).values() #查找 列 count < sale的数据 for i in ret: print(i) models.Book.objects.filter

随机推荐