models.py:
django。数据库导入模型 #出版社 类的出版商(models.Model): id=models.AutoField (primary_key=True) name=模型。CharField (max_length=64,零=False,独特的=True) def __str__(自我): 返回“& lt;出版商对象:{}在“.format (self.name) #书籍 类的书(models.Model): id=models.AutoField (primary_key=True) title=模型。CharField (max_length=64,零=False,独特的=True) 价格=模型。DecimalField (max_digits=5, decimal_places=2,默认=00.00)#最长位数为5,小数位数为2,默认值为00.00 出版商=模型。ForeignKey(=胺⑿腥恕?null=True) #把空设置为真实的 def __str__(自我): 返回“& lt;书对象:{}在“.format (self.title) #作者 类作者(models.Model): id=models.AutoField (primary_key=True) name=模型。null=False CharField (max_length=16日,独特的=True) 书=models.ManyToManyField(=笆椤?#多对多关联书表,ORM会自动生成第3张表 def __str__(自我): 返回“& lt;作者对象:{}在“.format (self.name)
书表:
修改价格
<强>聚合查询:强>
总():返回一个包含一些键值对的字典。
键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。
orm.py:
进口操作系统 if __name__==癬_main__”: #加载Django项目的配置信息 os.environ。setdefault (“DJANGO_SETTINGS_MODULE”、“mysite2.settings”) #导入Django,并启动Django项目 进口django django.setup () 从app01导入模型 #聚合查询需要导入的函数 从django.db。模型导入Avg、总和、最大值、最小值、计数 #计算所有书籍价格的平均值 avg_ret=models.Book.objects.all () .aggregate (Avg(“价格”)) 打印(avg_ret) #计算所有书籍价格的总和 sum_ret=models.Book.objects.all () .aggregate (Sum(“价格”)) 打印(sum_ret) #计算所有书籍价格的最大值 max_ret=models.Book.objects.all () .aggregate (Max(“价格”)) 打印(max_ret) #计算所有书籍价格的最小值 min_ret=models.Book.objects.all () .aggregate (Min(“价格”)) 打印(min_ret) #计算所有书籍的价格个数 count_ret=models.Book.objects.all () .aggregate (Count(“价格”)) 打印(count_ret)
运行结果:
生成的是字典类型
<>强分组:
强>
orm.py:
进口操作系统 if __name__==癬_main__”: #加载Django项目的配置信息 os.environ。setdefault (“DJANGO_SETTINGS_MODULE”、“mysite2.settings”) #导入Django,并启动Django项目 进口django django.setup () 从app01导入模型 从django.db。模型导入数 #查询每一本书的作者个数 ret=models.Book.objects.all () .annotate (author_num=Count(“作者”))#返回的是书对象,注释(author_num)相当于让书对象多了一个author_num字段 打印(ret) 受潮湿腐烂的书: 打印(“书名:{},作者数:{}“.format(书。标题、book.author_num)
运行结果:
这里的book.annotate (author_num)相当于让书对象多了一个author_num字段,但并不是在数据库中多了一个字段
orm.py:
进口操作系统 if __name__==癬_main__”: #加载Django项目的配置信息 os.environ。setdefault (“DJANGO_SETTINGS_MODULE”、“mysite2.settings”) #导入Django,并启动Django项目 进口django django.setup () 从app01导入模型 从django.db。模型导入数 #查询作者数大于1的书 ret=models.Book.objects.all () .annotate (author_num=Count(“作者”)).filter (author_num__gt=1) 打印(ret)Django ORM聚合查询和分组查询实现详解