iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Django 聚合函数的具体使用
  • 804
分享到

Django 聚合函数的具体使用

2024-04-02 19:04:59 804人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

前言 ORM模型中的聚合函数跟Mysql中的聚合函数作用是一致的,也有像Sum、Avg、Count、Max、Min,接下来我们逐个介绍 聚合函数 所有的聚合函数都是放在Djan

前言

ORM模型中的聚合函数跟Mysql中的聚合函数作用是一致的,也有像Sum、Avg、Count、Max、Min,接下来我们逐个介绍

聚合函数

所有的聚合函数都是放在Django.db.models下面。并且聚合函数不能够单独的执行,聚合函数是通过aggregate方法来实现的。在说明聚合函数的用法的时候,都是基于以下的模型对象来实现的。


class Author(models.Model):
     """作者模型"""
     name = models.CharField(max_length=100)
     age = models.IntegerField()
     email = models.EmailField()

     class Meta:
         db_table = 'author'


 class Publisher(models.Model):
     """出版社模型"""
     name = models.CharField(max_length=300)

     class Meta:
         db_table = 'publisher'


 class Book(models.Model):
     """图书模型"""
     name = models.CharField(max_length=300)
     pages = models.IntegerField()
     price = models.FloatField()
     rating = models.FloatField()
     author = models.ForeignKey(Author,on_delete=models.CASCADE)
     publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)

     class Meta:
         db_table = 'book'


 class BookOrder(models.Model):
     """图书订单模型"""
     book = models.ForeignKey("Book",on_delete=models.CASCADE)
     price = models.FloatField()

     class Meta:
         db_table = 'book_order'

Avg

Avg:求平均值。比如想要获取所有图书的价格平均值。那么可以使用以下代码实现。


 from djanGo.db.models import Avg
 result = Book.objects.aggregate(Avg('price'))
 print(result)

以上的打印结果是:

 {"price__avg":23.0}

其中price__avg的结构是根据field__avg规则构成的。如果想要修改默认的名字,那么可以将Avg赋值给一个关键字参数。示例代码如下:


 from django.db.models import Avg
 result = Book.objects.aggregate(my_avg=Avg('price'))
 print(result)

以上的打印结果为

 {"my_avg":23} 

Count

Count:获取指定的对象的个数。示例代码如下:


 from django.db.models import Count
 result = Book.objects.aggregate(book_num=Count('id'))

以上的result将返回Book表中总共有多少本图书。

Count类中,还有另外一个参数叫做distinct,默认是等于False,如果是等于True,那么将去掉那些重复的值。比如要获取作者表中所有的不重复的邮箱总共有多少个,那么可以通过以下代码来实现:


from djang.db.models import Count
result = Author.objects.aggregate(count=Count('email',distinct=True))

Max和Min

Max和Min:获取指定对象的最大值和最小值。比如想要获取Author表中,最大的年龄和最小的年龄分别是多少。那么可以通过以下代码来实现:


from django.db.models import Max,Min
result = Author.objects.aggregate(Max('age'),Min('age'))

如果最大的年龄是90,最小的年龄是10。那么以上的result将为:

{"age__max":90,"age__min":10}

Sum

Sum:求指定对象的总和。比如要求图书的销售总额。那么可以使用以下代码实现:


from djang.db.models import Sum
result = Book.objects.annotate(total=Sum("bookorder__price"))

以上的代码annotate的意思是给Book表在查询的时候添加一个字段叫做total,这个字段的数据来源是从BookOrder模型的price的总和而来。 

aggregate和annotate的区别

相同点:这两个方法都可以执行聚合函数。

不同点:

  • aggregate返回的是一个字典,在这个字典中存储的是这个聚合函数执行的结果。而annotate返回的是一个QuerySet对象,并且会在查找的模型上添加一个聚合函数的属性。
  • aggregate不会做分组,而annotate会使用group by子句进行分组,只有调用了group by子句,才能对每一条数据求聚合函数的值。

F表达式:

F表达式: 动态的获取某个字段上的值。并且这个F表达式,不会真正的去数据库中查询数据,他相当于只是起一个标识的作用。比如想要将原来每本图书的价格都在原来的基础之上增加10元,那么可以使用以下代码来实现:


from django.db.models import F
Book.objects.update(price=F("price")+10) 

Q表达式

Q表达式:使用Q表达式包裹查询条件,可以在条件之间进行多种操作。与/或非等,从而实现一些复杂的查询操作。例子如下:

查找价格大于100,并且评分达到4.85以上的图书:


  # 不使用Q表达式的
  books = Book.objects.filter(price__gte=100,rating__gte=4.85)
  # 使用Q表达式的
  books = Book.objects.filter(Q(price__gte=100)&Q(rating__gte=4.85))

查找价格低于100元,或者评分低于4分的图书:


books = Book.objects.filter(Q(price__gte=100)&Q(rating__gte=4.85))

获取价格大于100,并且图书名字中不包含”传“字的图书:


books = Book.objects.filter(Q(price__gte=100)&~Q(name__icontains='传'))

到此这篇关于Django 聚合函数的具体使用的文章就介绍到这了,更多相关Django 聚合函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Django 聚合函数的具体使用

本文链接: https://www.lsjlt.com/news/126336.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Django 聚合函数的具体使用
    前言 orm模型中的聚合函数跟MySQL中的聚合函数作用是一致的,也有像Sum、Avg、Count、Max、Min,接下来我们逐个介绍 聚合函数 所有的聚合函数都是放在djan...
    99+
    2024-04-02
  • pandas中聚合函数agg的具体用法
    今天看到pandas的聚合函数agg,比较陌生,平时的工作中处理数据的时候使用的也比较少,为了加深印象,总结一下使用的方法,其实还是挺好用的。 DataFrame.agg(func,...
    99+
    2024-04-02
  • Django视图函数的具体使用
    视图是 MTV 设计模式中的 V 层,它是实现业务逻辑的关键层,可以用来连接 M 层与 T 层,起着纽带般的作用,在《Django MTV和MVC的区别》中也做了相应的介绍,所以它的...
    99+
    2024-04-02
  • django中path和url函数的具体使用
    在django学习中,经常看到这两种路由形式 from django.urls import path from django.conf.urls import url djang...
    99+
    2023-03-19
    django path django url
  • MySQL如何使用聚合函数
    这篇文章主要为大家展示了“MySQL如何使用聚合函数”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL如何使用聚合函数”这篇文章吧。聚合函数命令: sum...
    99+
    2024-04-02
  • MybatisPlus怎么使用聚合函数
    这篇文章主要介绍了MybatisPlus怎么使用聚合函数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MybatisPlus怎么使用聚合函数文章都会有所收获,下面我们一起来看看吧。首先如果使用sql是这么写的:...
    99+
    2023-07-05
  • Pythonisalnum()函数的具体使用
    目录1、包含字母和数字的情况2、汉字和其他语言的情况3、空字符串、制表符、特殊符号、标点符号isalnum() 可以判断字符串的字符是否全都是「字母」和「数字」。 语法 string...
    99+
    2023-08-08
    Python isalnum()
  • np.repeat()函数的具体使用
    目录使用np.repeat()展平二维数组np.repeat()函数的坐标轴问题二维三维在 numpy 模块中的 repeat 函数,总是会出现设置 axis 坐标轴的情况,这时的坐...
    99+
    2023-03-13
    np.repeat()函数 np.repeat
  • np.concatenate()函数的具体使用
    目录引言函数调用调用方法各个参数的意义注意事项示例1------一维数组示例2------二维数组示例3------三维数组引言 提到 numpy 的数组操作,我们就不得不说到 np...
    99+
    2023-03-13
    np.concatenate()函数
  • pythonre.match函数的具体使用
    目录1 re.match 说明2 span 的使用3 group 的使用4 匹配不到内容的情况5 使用group 注意点6 flag 的使用1 re.match 说明 re.matc...
    99+
    2023-02-13
    python re.match
  • Pandasdiv()函数的具体使用
    div()方法将DataFrame中的每个值除以指定的值,并返回一个计算处理后的Dataframe结果 DataFrame.div()函数其实是除法运算,表格中的每个数据都是被除数 ...
    99+
    2023-05-14
    Pandas div()函数 Pandas div DataFrame.div()
  • numpy.ndarray.flatten()函数的具体使用
    目录numpy.ravel() 和 numpy.flatten()该函数主要用来快速扁平化数组,请看如下代码: import numpy as np class Debug:  ...
    99+
    2023-03-13
    numpy.ndarray.flatten numpy flatten
  • np.newaxis()函数的具体使用
    np.newaxis np.newaxis 的功能是增加新的维度,但是要注意 np.newaxis 放的位置不同,产生的矩阵形状也不同。 通常按照如下规则: np.newaxis 放...
    99+
    2023-03-13
    np.newaxis使用 np.newaxis
  • django中websocket的具体使用
    websocket是一种持久化的协议,HTTP协议是一种无状态的协议,在特定场合我们需要使用长连接,做数据的实时更新,这种情况下我们就可以使用websocket做持久连接。http与...
    99+
    2024-04-02
  • numpy.reshape()的函数的具体使用
    np.reshape()基本用法 常用于矩阵规格变换,将矩阵转换为特定的行和列的矩阵格式:a1.reshape(x,y,z,…)注意:将矩阵a1转变成(x, y,z,&...
    99+
    2023-02-10
    numpy.reshape()
  • pandas函数isnull的具体使用
    目录一.假设有数据集df二.判断有空值的列三.显示出有空值列的列名的列表四.删除全部是空值的行五.删除全部是空值的列六.对某一列中的空值进行填充七.method参数一.假设有数据集d...
    99+
    2024-04-02
  • pandas DataFrame.shift()函数的具体使用
    pandas DataFrame.shift()函数可以把数据移动指定的位数 period参数指定移动的步幅,可以为正为负.axis指定移动的轴,1为行,0为列. eg: 有这样一个...
    99+
    2024-04-02
  • C++ setw()函数的具体使用
    C++ setw() 函数用于设置字段的宽度,语法格式如下: setw(n) n 表示宽度,用数字表示。 setw() 函数只对紧接着的输出产生作用。 当后面紧跟着的输出字段长度小...
    99+
    2023-03-09
    C++ setw()
  • MybatisPlus使用聚合函数的示例代码
    目录前言方式1 通过select自定义sql求一个sum求多个sum方式2 xml手写原生sql总结前言 今天遇到了一个求总数返回的情况,我一想这不是用sum就完事了吗。 但是仔细想...
    99+
    2023-03-19
    MybatisPlus 聚合函数
  • SQL Server中的聚合函数怎么使用
    这篇“SQL Server中的聚合函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SQL Se...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作