DDR爱好者之家 Design By 杰米
在本文中,我想向您介绍如何在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
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年11月25日
2024年11月25日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]