django下ORM操作之分组和聚合查询

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值