首页 > 其他分享 >django中aggregate()和annotate()区别

django中aggregate()和annotate()区别

时间:2023-05-10 12:33:30浏览次数:32  
标签:count Count 聚合 示例 django annotate aggregate

在 Django 中,aggregate() 和 annotate() 是两个常用的聚合函数。它们都可以用来对一组查询结果进行聚合操作,但它们的作用是有所不同的。

aggregate() 是用于聚合整个查询集的结果,通常用于返回一个值,例如计算查询集中所有结果的数量、平均值、最大值或最小值等。使用 aggregate() 函数时,需要用到 SQL 中的聚合函数(如 Count、Sum、Min、Max、Avg 等)。

以 Model.objects.aggregate() 为例,以下是一个示例:

from django.db.models import Count
from myapp.models import MyModel

# 统计所有模型对象的数量
obj_count = MyModel.objects.aggregate(obj_count=Count('id'))

# 输出结果
print(obj_count)

在这个示例中,使用 Count 函数对 id 字段进行聚合操作。

而 annotate() 的作用是对数据库中每一行进行聚合操作,并返回一个新的查询集,通常用于计算每个分组的聚合值。使用 annotate() 函数时,需要用到 SQL 中的 GROUP BY 语句。

以 Model.objects.annotate() 为例,以下是一个示例:

from django.db.models import Count
from myapp.models import MyModel

# 统计每个分类下的记录数量
category_count = MyModel.objects.values('category').annotate(cat_count=Count('id'))

# 输出结果
print(category_count)

在这个示例中,使用 values() 函数指定要分组的字段 category,然后使用 Count 函数对 id 字段进行聚合操作,并为结果起一个别名 cat_count

总结起来,aggregate() 是将整个查询结果视为一组数据,进行统计计算,而 annotate() 是将查询结果按照一个或多个字段分组,再对每一组进行统计计算。

 

标签:count,Count,聚合,示例,django,annotate,aggregate
From: https://www.cnblogs.com/shaoyishi/p/17387639.html

相关文章

  • Django高级之-中间件
    目录一什么是中间件二中间件有什么用七个中间件中间件中的方法三自定义中间件process_request和process_responseprocess_viewprocess_exceptionprocess_template_response四中间件应用场景1、做IP访问频率限制2、URL访问过滤五CSRF_TOKEN跨站请求伪造背景信息form表单中如何......
  • Django笔记二十三之case、when操作条件表达式搜索、更新等操作
    本文首发于公众号:Hunter后端原文链接:Django笔记二十三之条件表达式搜索、更新等操作这一篇笔记将介绍条件表达式,就是如何在model的使用中根据不同的条件筛选数据返回。这个操作类似于数据库中ifelifelse的逻辑。以下是本篇笔记的目录:model和数据准备When和Case......
  • Nginx+uwsgi+django 搭建web服务器
    1、下载安装相关软件centos环境下安装:安装组件:yumgroupinstall"Developmenttools"yuminstallzlib-develbzip2-develpcre-developenssl-develncurses-develsqlite-develreadline-develtk-devel 安装python:cd~wgethttps://pypi.python.org/packages/source/d......
  • Django REST framework创建api
    我们将创建一个简单的允许管理员用户查看和编辑系统中的用户和组的API。项目设置创建一个名为 tutorial 的新django项目,然后启动一个名为 quickstart 的新app。#创建项目目录mkdirtutorialcdtutorial#创建一个virtualenv来隔离我们本地的包依赖关系virtualenvenv......
  • django系列-环境及纯净配置
    一、安装django1.建立虚拟环境venv,Python官方用语创建虚拟环境的工具D:\learn_django>python-mvenvll_env(环境名称)--python=python3.6#可以替换成电脑里其他python版本D:\learn_django>python-mvenvll_env(环境名称)--python='C:\python\python3.6.exe'#可以直......
  • django中ORM开启事务
    django中ORM开启事务一、全局开启ATOMIC_REQUESTS设置为True,每个请求过来时,Django会在调用视图方法前开启一个事务。如果请求正确处理并正确返回了结果,Django就会提交该事务,否则,Django会回滚该事务。DATABASES={'default':{'ENGINE':'django.db.backends.mys......
  • Django高级之-cookie与session
    目录1背景信息cookie的介绍cookie的由来什么是cookiecookie的原理Cookie规范Cookie的覆盖在浏览器中查看cookiesession的介绍session的由来什么是sessiontoken的介绍token的由来什么是token?Django操作cookie设置cookie获取cookie删除CookieCookie版登录校验案例Django操作Session......
  • Django笔记三十八之发送邮件
    本文首发于公众号:Hunter后端原文链接:Django笔记三十八之发送邮件这一篇笔记介绍如何在Django中发送邮件。在Python中,提供了smtplib的邮件模块,而Django在这个基础上对其进行了封装,我们可以通过django.core.mail来调用。以下是本篇笔记的目录:邮件配置项send_mail......
  • Web框架与Django简介
    Web框架与Django简介一、Web应用的组成我们接下来学习的目的就是为了开发一个Web应用软件。那到底什么是Web应用软件呢?对于传统的应用软件来说,基本上都是部署于单机使用的,而Web应用软件则不一样,Web应用软件是基于B/S架构的,B与S部署于不同的计算机上,并且基于网络通信,所以B与S的......
  • Django之csrf跨站请求
    目录CSRF_TOKEN跨站请求伪造在form表单中应用:在Ajax中应用:关于CSRF中间件的全站禁用和局部禁用在CBV中使用:CSRF_TOKEN跨站请求伪造介绍:浅谈CSRF(Cross-siterequestforgery)跨站请求伪造在form表单中应用:<formaction=""method="post">{%csrf_token%}<p>用户名:<in......