Django 聚合

Django 聚合


  1. 在查询集上生成聚合(aggregate)
    aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。如果你想要为聚合值指定一个名称,可以向聚合子句提供它。
    1
    2
    >>> Book.objects.aggregate(average_price=Avg('price'))
    {'average_price': 34.35}
  2. 为查询集的每一项生成聚合(annotate)
    逐个对象的汇总结果可以由annotate()子句生成。当annotate()子句被指定之后,QuerySet中的每个对象都会被注上特定的值。
    这些注解的语法都和aggregate()子句所使用的相同。annotate()的每个参数都描述了将要被计算的聚合。比如,给图书添加作者数量的注解:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # Build an annotated queryset
    >>> from django.db.models import Count
    >>> q = Book.objects.annotate(Count('authors'))
    # Interrogate the first object in the queryset
    >>> q[0]
    <Book: The Definitive Guide to Django>
    >>> q[0].authors__count
    2
    # Interrogate the second object in the queryset
    >>> q[1]
    <Book: Practical Django Projects>
    >>> q[1].authors__count
    1
    和使用 aggregate()一样,注解的名称也根据聚合函数的名称和聚合字段的名称得到的。你可以在指定注解时,为默认名称提供一个别名:
1
2
3
4
5
>>> q = Book.objects.annotate(num_authors=Count('authors'))
>>> q[0].num_authors
2
>>> q[1].num_authors
1

与 aggregate() 不同的是, annotate() 不是一个终止子句。annotate()子句的返回结果是一个查询集 (QuerySet);这个 QuerySet可以用任何QuerySet方法进行修改,包括 filter(), order_by(), 甚至是再次应用annotate()。

Django 聚合

本文标题:Django 聚合

文章作者:shuke

发布时间:2020年04月23日 - 15:04

最后更新:2020年04月23日 - 15:04

原始链接:https://shuke163.github.io/2020/04/23/Django-%E8%81%9A%E5%90%88/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------

本文标题:Django 聚合

文章作者:shuke

发布时间:2020年04月23日 - 15:04

最后更新:2020年04月23日 - 15:04

原始链接:https://shuke163.github.io/2020/04/23/Django-%E8%81%9A%E5%90%88/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%