如何在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 相关文章推荐
KMP算法精解及其Python版的代码示例
Jun 01 Python
Python制作钉钉加密/解密工具
Dec 07 Python
TensorFlow实现创建分类器
Feb 06 Python
Python 循环语句之 while,for语句详解
Apr 23 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
对python中assert、isinstance的用法详解
Nov 27 Python
Python同时迭代多个序列的方法
Jul 28 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
python opencv通过按键采集图片源码
May 20 Python
Python爬虫实战之爬取携程评论
Jun 02 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
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
JavaScript中数据结构与算法(二):队列
2015/06/19 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
提升Python程序运行效率的6个方法
2015/03/31 Python
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
介绍一下gcc特性
2012/01/20 面试题
新闻专业本科生的自我评价分享
2013/11/20 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
单位活动策划方案
2014/08/17 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
社会实践活动报告
2015/02/05 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
党章学习心得体会2016
2016/01/14 职场文书
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript
选购到合适的激光打印机
2022/04/21 数码科技