如何在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在windows下实现备份程序实例
Jul 04 Python
实例讲解Python中的私有属性
Aug 21 Python
wxPython窗口的继承机制实例分析
Sep 28 Python
Python中处理字符串之isalpha()方法的使用
May 18 Python
python中私有函数调用方法解密
Apr 29 Python
Python如何读取MySQL数据库表数据
Mar 11 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
python实现计数排序与桶排序实例代码
Mar 28 Python
python 整数越界问题详解
Jun 27 Python
linux中如何使用python3获取ip地址
Jul 15 Python
PyTorch的自适应池化Adaptive Pooling实例
Jan 03 Python
Python基础之字典常见操作经典实例详解
Feb 26 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
PHP注释实例技巧
2008/10/03 PHP
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
php中使用sftp教程
2015/03/30 PHP
PHP通过API获取手机号码归属地
2015/05/28 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
JavaScript实现表格排序方法
2013/06/14 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
销售业务员岗位职责
2014/01/29 职场文书
食品安全宣传标语
2014/06/07 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
python实现网络五子棋
2021/04/11 Python