zoukankan      html  css  js  c++  java
  • Django自带的ORM如何执行group by(聚合查询)语句(求和、累积、平均)

    使用Django的ORM建立了如下Model:

    class Book(models.Model):
        # 书籍名字
        name = models.CharField(max_length=300)
        # 书籍页数
        pages = models.IntegerField()
        # 书籍价格
        price = models.DecimalField(max_digits=10, decimal_places=2)
        # 书籍作则
        authors = models.CharField(max_length=300)
        publisher = models.CharField(max_length300)
        # 发布日期
        pub_date = models.DateField()
    

      

    现在想查询以字段authors分组,查出每个作者所著所有书的总页书,用SQL语句可以很容易的完成此任务:

    SELECT *, SUM(pages) AS total_pages
    FROM Book
    GROUP BY authors;
    

      

    那么如何用Django自带的ORM接口实现呢?

    方法如下:

    from django.db.models import Sum
    
    result = Book.objects.values("authors").annotate(total_pages=Sum("pages")).all()
    

      

    计算每个作者一共写了多少本书籍代码示例:


    from django.db.models import Count
    
    result = Book.objects.values("authors").annotate(total=Count("name ")).all()
    

      

    计算书籍的平均价格代码示例:

    from django.db.models import Avg
    
    result = Book.objects.values("authors").annotate(price=Avg("price ")).all()
    

     

    参考文献:

    http://www.chenxm.cc/post/465.html

  • 相关阅读:
    ATM
    Python不同目录间模块调用
    Python跨目录调程序
    Python软件目录结构规范
    进程的创建-multiprocessing
    进程
    多任务版udp聊天器
    死锁
    互斥锁
    同步
  • 原文地址:https://www.cnblogs.com/chenxinming-top/p/7815565.html
Copyright © 2011-2022 走看看