亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Django ORM 聚合查詢和分組查詢實現(xiàn)詳解

 更新時間:2019年08月09日 10:24:11   作者:Sch01aR#  
這篇文章主要介紹了Django ORM 聚合查詢和分組查詢實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

models.py:

from django.db import models 
# 出版社
class Publisher(models.Model):
  id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=64, null=False, unique=True)
 
  def __str__(self):
    return "<Publisher object: {}>".format(self.name) 
 
# 書籍
class Book(models.Model):
  id = models.AutoField(primary_key=True)
  title = models.CharField(max_length=64, null=False, unique=True)
  price = models.DecimalField(max_digits=5, decimal_places=2, default=00.00) # 最長位數(shù)為 5,小數(shù)位數(shù)為 2,默認(rèn)值為 00.00
  publisher = models.ForeignKey(to="Publisher", null=True) # 把 null 設(shè)置為 True
 
  def __str__(self):
    return "<Book object: {}>".format(self.title)
 
# 作者
class Author(models.Model):
  id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=16, null=False, unique=True)
  book = models.ManyToManyField(to="Book") # 多對多關(guān)聯(lián) Book 表,ORM 會自動生成第 3 張表
 
  def __str__(self):
    return "<Author object: {}>".format(self.name)

book 表:

修改 price

聚合查詢:

aggregate():返回一個包含一些鍵值對的字典。

鍵的名稱是聚合值的標(biāo)識符,值是計算出來的聚合值。鍵的名稱是按照字段和聚合函數(shù)的名稱自動生成出來的。

orm.py:

import os 
if __name__ == '__main__':
  # 加載 Django 項目的配置信息
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
  # 導(dǎo)入 Django,并啟動 Django 項目
  import django
  django.setup() 
  from app01 import models 
  # 聚合查詢需要導(dǎo)入的函數(shù)
  from django.db.models import Avg, Sum, Max, Min, Count 
  # 計算所有書籍 price 的平均值
  avg_ret = models.Book.objects.all().aggregate(Avg("price"))
  print(avg_ret) 
  # 計算所有書籍 price 的總和
  sum_ret = models.Book.objects.all().aggregate(Sum("price"))
  print(sum_ret) 
  # 計算所有書籍 price 的最大值
  max_ret = models.Book.objects.all().aggregate(Max("price"))
  print(max_ret) 
  # 計算所有書籍 price 的最小值
  min_ret = models.Book.objects.all().aggregate(Min("price"))
  print(min_ret) 
  # 計算所有書籍 price 的個數(shù)
  count_ret = models.Book.objects.all().aggregate(Count("price"))
  print(count_ret)

運行結(jié)果:

生成的是字典類型

分組:

orm.py:

import os 
if __name__ == '__main__':
  # 加載 Django 項目的配置信息
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
  # 導(dǎo)入 Django,并啟動 Django 項目
  import django
  django.setup() 
  from app01 import models 
  from django.db.models import Count 
  # 查詢每一本書的作者個數(shù)
  ret = models.Book.objects.all().annotate(author_num=Count("author")) # 返回的是 book 對象,annotate(author_num) 相當(dāng)于讓 book 對象多了一個 author_num 字段
  print(ret)   
  for book in ret:
    print("書名:{},作者數(shù):{}".format(book.title, book.author_num))

運行結(jié)果:

這里的 book.annotate(author_num) 相當(dāng)于讓 book 對象多了一個 author_num 字段,但并不是在數(shù)據(jù)庫中多了一個字段

orm.py:

import os 
if __name__ == '__main__':
  # 加載 Django 項目的配置信息
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
  # 導(dǎo)入 Django,并啟動 Django 項目
  import django
  django.setup() 
  from app01 import models
  from django.db.models import Count 
  # 查詢作者數(shù)大于 1 的書
  ret = models.Book.objects.all().annotate(author_num=Count("author")).filter(author_num__gt=1)
  print(ret)

運行結(jié)果:

orm.py:

import os 
if __name__ == '__main__':
  # 加載 Django 項目的配置信息
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
  # 導(dǎo)入 Django,并啟動 Django 項目
  import django
  django.setup() 
  from app01 import models 
  from django.db.models import Sum 
  # 查詢各個作者出的書的總價格
  ret = models.Author.objects.all().annotate(price_sum=Sum("book__price")) # 獲取所有 author 表數(shù)據(jù)并添加 price_sum 字段 
  for i in ret:
    print(i, i.name, i.price_sum) # 打印所有 author 對象、 author 的 name 字段、price_sum 字段 的數(shù)據(jù)
  # 打印 author 表的所有 id、name、price_sum 字段數(shù)據(jù)
  print(ret.values_list("id", "name", "price_sum"))

運行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題

    解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題

    今天小編就為大家分享一篇解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • VSCode運行或調(diào)試python文件無反應(yīng)的問題解決

    VSCode運行或調(diào)試python文件無反應(yīng)的問題解決

    這篇文章主要給大家介紹了關(guān)于VSCode運行或調(diào)試python文件無反應(yīng)的問題解決,使用VScode編譯運行C/C++沒有問題,但是運行Python的時候出了問題,所以這里給大家總結(jié)下,需要的朋友可以參考下
    2023-07-07
  • Python面向?qū)ο笾惖亩x與繼承用法示例

    Python面向?qū)ο笾惖亩x與繼承用法示例

    這篇文章主要介紹了Python面向?qū)ο笾惖亩x與繼承用法,結(jié)合實例形式分析了Python類的定義、實例化、繼承等基本操作技巧,需要的朋友可以參考下
    2019-01-01
  • python的移位操作實現(xiàn)詳解

    python的移位操作實現(xiàn)詳解

    這篇文章主要介紹了ppython的移位操作實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • 如何對numpy?矩陣進(jìn)行通道間求均值

    如何對numpy?矩陣進(jìn)行通道間求均值

    這篇文章主要介紹了如何對numpy?矩陣進(jìn)行通道間求均值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python實現(xiàn)多個視頻合成一個視頻的功能

    Python實現(xiàn)多個視頻合成一個視頻的功能

    這篇文章主要介紹了可以將多個視頻拼接為一個視頻的Python工具代碼,文中的代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定的幫助,快來跟隨小編一起學(xué)習(xí)一下吧
    2021-12-12
  • python實發(fā)郵件實例詳解

    python實發(fā)郵件實例詳解

    在本篇文章里小編給大家整理的是關(guān)于python實發(fā)郵件的相關(guān)知識點內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2019-11-11
  • python字符串循環(huán)左移

    python字符串循環(huán)左移

    這篇文章主要為大家詳細(xì)介紹了Python字符串循環(huán)左移,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • python使用paramiko模塊通過ssh2協(xié)議對交換機(jī)進(jìn)行配置的方法

    python使用paramiko模塊通過ssh2協(xié)議對交換機(jī)進(jìn)行配置的方法

    今天小編就為大家分享一篇python使用paramiko模塊通過ssh2協(xié)議對交換機(jī)進(jìn)行配置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python matplotlib模塊及柱狀圖用法解析

    Python matplotlib模塊及柱狀圖用法解析

    這篇文章主要介紹了Python matplotlib模塊及柱狀圖用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08

最新評論