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


Posted in Python onMarch 23, 2020

在本文中,我想向您介绍如何在Django中使用聚合,聚合的含义是“内容相关项的集合,以便它们可以显示或链接到”。在Django中,我们使用的情况例如:

用于在Django模型的数据库表中查找列的“最大值”,“最小值”。

用于基于列在数据库表中查找记录的“计数”。

用于查找一组相似对象的“平均值”值。

还用于查找列中的值的总和。

在大多数情况下,我们对数据类型为“整数”,“浮点数”,“日期”,“日期时间”等的列使用聚合。

本质上,聚合不过是对一组行执行操作的一种方式。在数据库中,它们由运算符表示为sum,avg等。执行这些操作Django在查询集中添加了两个新方法。

这两种方法是聚合和注释。我们也可以说,在sql中,aggregate是一个没有分组依据的操作(SUM,AVG,MIN,MAX),而annotate是在rowet_table.id上具有分组依据的操作。 (除非明确覆盖)。

让我们从新建一个工程开始:

#创建工程
django-admin startproject MyProject
#创建应用
python manage.py startapp Myapp

加应用到settings.py文件

INSTALLED_APPS = [
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'Myapp'  #newly added 
]

执行migrate命令:

python manage.py migrate

创建管理员用户:

python manage.py createsuperuser

打开Myapp下models.py文件,写入:

from django.db import models
 # Create your models here.
 
class Author(models.Model):
  name = models.CharField(max_length=50)
 
  def __str__(self):
    return self.name 
 
class Publisher(models.Model):
  name = models.CharField(max_length=50)
 
  def __str__(self):
    return self.name 
 
class Book(models.Model):
  name = models.CharField(max_length=300)
  price = models.DecimalField(max_digits=10, decimal_places=2)
  authors = models.ManyToManyField(Author)
  publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
 
  def __str__(self):
    return self.name

然后运行数据库迁移命令:

python manage.py makemigrations
python manage.py migrate

注册model到admin中,打开Myapp下admin.py文件,加入:

from django.contrib import admin
from .models import Book, Author, Publisher
 
# Register your models here.
 
admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Publisher)

之后,您需要打开管理面板并将一些项目添加到数据库中。 之后,我们将启动聚合命令。

现在您需要打开django shell,因为我们将django shell用于我们的聚合命令。

运行命令:

python manage.py shell

1、查看总共有多少本书:

In [1]: from MyApp.models import Book
 
In [2]: Book.objects.count()
Out[2]: 8

2、查看某出版社下有多少本书?

In [5]: Book.objects.filter(publisher__name = 'Second')
Out[5]: <QuerySet [<Book: Python New Book>, <Book: Kotlin Book>]>

3、查看书的评价价格:

In [6]: from django.db.models import Avg
 
In [7]: Book.objects.all().aggregate(Avg('price'))
Out[7]: {'price__avg': Decimal('121.25')}

4、查看价格最贵的书价格:

In [8]: from django.db.models import Max
 
In [9]: Book.objects.all().aggregate(Max('price'))
Out[9]: {'price__max': Decimal('185')}

5、查看价格最便宜的书价格:

In [10]: from django.db.models import Min
 
In [11]: Book.objects.all().aggregate(Min('price'))
Out[11]: {'price__min': Decimal('50')}

6、所有书价格汇总:

In [12]: from django.db.models import Sum
 
In [13]: Book.objects.all().aggregate(Min('price'))
Out[13]: {'price__min': Decimal('50')}

7、混合使用:

In [5]: Book.objects.aggregate(Avg('price'), Max('price'), Min('price'))
Out[5]: 
{'price__avg': Decimal('121.25'),
 'price__max': Decimal('185'),
 'price__min': Decimal('50')}

8、annotate使用:

In [9]: from MyApp.models import Publisher
 
In [10]: from django.db.models import Count
 
In [11]: pubs = Publisher.objects.annotate(num_books=Count('book'))
 
In [12]: pubs[0].num_books
Out[12]: 3

到此这篇关于如何在Django中使用聚合的实现示例的文章就介绍到这了,更多相关Django使用聚合内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python网络编程之读取网站根目录实例
Sep 30 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
Swift中的协议(protocol)学习教程
Jul 08 Python
K-means聚类算法介绍与利用python实现的代码示例
Nov 13 Python
Python获取指定文件夹下的文件名的方法
Feb 06 Python
Python3对称加密算法AES、DES3实例详解
Dec 06 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
pygame实现打字游戏
Feb 19 Python
python创建n行m列数组示例
Dec 02 Python
python实现密度聚类(模板代码+sklearn代码)
Apr 27 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
python打包生成so文件的实现
Oct 30 Python
python3注册全局热键的实现
Mar 22 #Python
浅谈Python线程的同步互斥与死锁
Mar 22 #Python
Django 项目布局方法(值得推荐)
Mar 22 #Python
python实现吃苹果小游戏
Mar 21 #Python
python实现贪吃蛇游戏源码
Mar 21 #Python
python实现微信打飞机游戏
Mar 24 #Python
Python类的动态绑定实现原理
Mar 21 #Python
You might like
js代码实现微博导航栏
2015/07/30 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
angular5 子组件监听父组件传入值的变化方法
2018/09/30 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
python浪漫表白源码
2019/04/05 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
python处理excel绘制雷达图
2019/10/18 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
团员学习总结的自我评价范文
2013/10/14 职场文书
英文简历自荐信范文
2013/12/11 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
合作协议书范文
2014/08/20 职场文书
竞选学委演讲稿
2014/09/13 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
与死神共舞观后感
2015/06/15 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
Java基础之this关键字的使用
2021/06/30 Java/Android
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
html中两种获取标签内的值的方法
2022/06/16 jQuery