import os
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm_about.settings")
import django
django.setup()
from app01 import models
from django.db.models import Min, Max, Sum, Avg, Count
# 所有书中最贵的书和书的平均价格
# ret = models.Book.objects.aggregate(max=Max('price'),avg=Avg('price'))
# print(ret)
# 查询每本书的作者
# ret = models.Book.objects.annotate(Count('authors')).values()
# for i in ret:
# print(i)
# 查询每个出版社中价格最便宜的书的价格
# 方法一:
# ret = models.Publisher.objects.annotate(min_price=Min('books__price'))
# for i in ret:
# print(i.name, i.min_price)
# 方法二:
# ret = models.Publisher.objects.annotate(min_price=Min('books__price')).values()
# for i in ret:
# print(i)
# 查询每个出版社中最贵的书的价格
# ret = models.Book.objects.values('publisher__name').annotate(max_price=Max('price'))
# for i in ret:
# print(i)
# 统计不止一个作者的图书
# ret = models.Book.objects.annotate(count_author=Count('authors')).filter(count_author__gt=1)
# for i in ret:
# print(i)
# 根据一本图书的作者数量的多少查询QuerySet进行排序,降序
# ret = models.Book.objects.annotate(num=Count('authors')).order_by('-num')
# print(ret)
# 查询各个作者出书的总价格
# ret = models.Author.objects.annotate(sum_price=Sum('books__price')).values('name', 'sum_price')
# for i in ret:
# print(i)
3、F和Q查询
from django.db.models import F, Q
# ret = models.Book.objects.filter(sale__gt=F('kucun')).values()
# for i in ret:
# print(i)
# models.Book.objects.all().update(sale=F('sale') * 2)
# ret = models.Book.objects.filter(Q(id__lte=3) | Q(id__gte=5)).values()
# print(ret)