Django ORM 聚合查询和分组查询

简介: 对QuerySet计算统计值,需要使用aggregate方法,提供的参数可以是一个或多个聚合函数Django提供了一系列的聚合函数,其中Avg(平均值)、Count(计数)、Max(最大值)、Min(最小值)、Sum(加和)最为常用要使用这些聚合函数,需要将它们引入当前的环境中:


1.聚合查询


对QuerySet计算统计值,需要使用aggregate方法,提供的参数可以是一个或多个聚合函数

Django提供了一系列的聚合函数,其中Avg(平均值)、Count(计数)、Max(最大值)、Min(最小值)、Sum(加和)最为常用

要使用这些聚合函数,需要将它们引入当前的环境中:


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


首先得到id为1的Topic的Comment对象,之后,计算up值的加和。可以看到,字典结果的键名称是up__sum,这是Django根据字段名和聚合函数的名称自动拼接得到的:


comment = Comment.objects.filter(topic=1).aggregate(Sum('up'))
return HttpResponse("Hello World!" + str(comment['up__sum']))


也可以给aggregate传递多个聚合函数:


comment = Comment.objects.filter(topic=1).aggregate(Sum('up'), Max('up'))
return HttpResponse("Hello World!" + str(comment['up__sum'])
                    + '---' + str(comment['up__max']))


2.分组查询


第二类统计是对QuerySet中的每一个Model对象都生成一个统计值,这可以通过annotate方法完成


annotate方法的使用过程与aggregate是类似的,都需要传递聚合函数,来描述统计过程


统计每一个Topic对应的Comment的数量,利用annotate可以这样实现:


topic = Topic.objects.annotate(Count('comment'))


如果想得到每一个Topic的所有Comment的up加和:


comment = Comment.objects.values('topic_id').annotate(Sum('up')).order_by()
return HttpResponse("Hello World!" + str(comment[0]['up__sum']))


需要注意,annotatevalues方法的顺序非常重要,会影响实际的查询效果:


valuesannotate的前面,Django会按照values中指定的字段对Model对象进行分组,再对每个分组计算统计值,可以参照上述查询


目录
相关文章
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
1009 173
|
9月前
|
SQL 存储 数据库
Django模型查询与性能调优:告别N+1问题
本文详解Django数据库查询基础与优化技巧,涵盖QuerySet使用、关联查询(一对多/多对多)、N+1查询问题及解决方案(select_related、prefetch_related)、高级查询方法及项目实战中的数据权限控制实现。
369 0
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
SQL 监控 数据库
深入探索Django ORM:高效数据操作的秘诀与实践####
在当今的Web开发领域,提升数据访问层的效率是优化应用性能的关键。本文旨在通过剖析Django框架中的ORM(对象关系映射)机制,揭示其如何简化数据库交互,并探讨一系列高级技巧与策略,帮助开发者构建更高效、可维护的数据访问代码。我们不涉及安装步骤或基础概念,而是聚焦于实战经验分享,旨在为中高级开发者提供深度洞见。 ####
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
451 0
|
SQL 前端开发 Python
基于python-django的neo4j人民的名义关系图谱查询系统
基于python-django的neo4j人民的名义关系图谱查询系统
419 0
|
API 数据库 开发者
【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
306 0
|
11月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
558 1
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
882 45