首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Django】聚合在Django的详细解析以及运用在企业级项目里的方法

本主题指南介绍如何使用Django查询生成和返回聚合值。...在此示例中,将计算Book模型上价格字段的平均值。可以在QuerySet引用中找到可用聚合函数的列表。 Aggregate()是QuerySet的一个结束语句。...在聚合函数中指定聚合字段时,Django允许您在筛选相关字段时使用相同的双下划线符号。Django将处理需要检索和聚合相关值的任何表连接。...(num_authors=Count('authors')) annotate()和filter()子句的顺序¶ 在开发涉及annotate()和filter()子句的复杂查询时,请特别注意应用于QuerySet...这实际上意味着filter()和annotate()不是可互换的操作。 例如: 出版商A有两本评分为4和5的书。 出版商B有两本评分为1和4的书。 出版商C有一本评分为1的书。

2K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django学习笔记之Django ORM Aggregation聚合详解

    每个对象的总结可以用方法annotate()生成: # 建立一个annotate QuerySet >>> from django.db.models import Count >>> q = Book.objects.annotate...Aggregations and other QuerySet clauses filter() and exclude() 聚合可以和filter和exclude一起使用: >>> from django.db.models...(num_authors=Count('authors')).filter(num_authors__gt=1) 编写一个包含annotate()和filter()从句的复杂查询时,要特别注意作用于QuerySet...=Count('authors')).order_by('num_authors') values() 通常,注解annotate是添加到每一个对象上的,一个执行了注解操作的查询集 QuerySet 所返回的结果中...(Count("id")) 这部分代码想通过使用它们公共的data值来分组Item对象,然后在每个分组中得到id值的总数。

    1.1K20

    Django(19)QuerySet API

    annotate annotate:给QuerySet中的每个对象都添加一个使用查询表达式(聚合函数、F表达式、Q表达式、Func表达式等)的新字段。...默认情况下会把表中所有的字段全部都提取出来,可以使用values来进行指定,并且使用了values方法后,提取出的QuerySet中的数据类型不是模型,而是在values方法中指定的字段和值形成的字典:...因为count在底层是使用select count(*)来实现的,这种方式比使用len函数更加的高效。...如果要判断某个条件的元素是否存在,那么建议使用exists,这比使用count或者直接判断QuerySet更有效得多。...Django将QuerySet转换为SQL语句去执行的五种情况 迭代:在遍历QuerySet对象的时候,会首先先执行这个SQL语句,然后再把这个结果返回进行迭代。

    74310

    Django学习笔记:QuerySet API

    他的方法全部都是通过Python动态添加的方式,从QuerySet类中拷贝过来的。 所以我们如果想要学习ORM模型的查找操作,必须首先要学会QuerySet上的一些API的使用。...annotate:给QuerySet中的每个对象都添加一个使用查询表达式(聚合函数、F表达式、Q表达式、Func表达式等)的新字段。...默认情况下会把表中所有的字段全部都提取出来,可以使用values来进行指定,并且使用了values方法后,提取出的QuerySet中的数据类型不是模型,而是在values方法中指定的字段和值形成的字典:...如果想要知道总共有多少条数据,那么建议使用count,而不是使用len(articles)这种。因为count在底层是使用select count(*)来实现的,这种方式比使用len函数更加的高效。...first和last:返回QuerySet中的第一条和最后一条数据。 aggregate:使用聚合函数。 exists:判断某个条件的数据是否存在。

    63320

    Django之QuerySet详解

    exclude() 排除满足条件的对象 annotate() 使用聚合函数 order_by() 对查询集进行排序 reverse() 反向排序 distinct() 对查询集去重...例如,如果正在操作一个Blog列表,你可能想知道每个Blog有多少Entry: >>> from django.db.models import Count >>> q = Blog.objects.annotate...当查询跨越多张表的数据时,QuerySet可能得到重复的结果,这时候可以使用distinct()进行去重。...21. using() using(alias) 如果正在使用多个数据库,这个方法用于指定在哪个数据库上查询QuerySet。方法的唯一参数是数据库的别名,定义在DATABASES。...对于返回大量只需要访问一次的对象的QuerySet,这可以带来更好的性能,显著减少内存使用。 请注意,在已经提交了的iterator()上使用QuerySet会强制它再次提交数据库操作,进行重复查询。

    2.4K20

    Django ORM模型:想说爱你不容易

    有一些限制条件是Django提供的,并没有数据库层面的对应物,比如blank。 (当blank参数为真时,对应字段可以为留为空白。) 在基本的模型设计上,Django ORM没有留什么坑。...需要注意的是,在Django ORM中,只能通过ForeignKey来定义多对一关系,不能显示地定义一对多关系。但你可以使用模型对象的*_set语法来反向调用多对一关系。...返回QuerySet的常见方法包括: all() filter() exclude() annotate() order_by() reverse() distinct() ......此外QuerySet一些方法,比get()、count()、earlist()、exists()等,都会对QuerySet进行求值。...聚合的aggregate()和annotate()方法可以实现基本的功能,但稍微复杂一点,代码就变得魔幻了: ? 看到一大串values()、annotate()变来变去,有没有觉得头晕?

    78920
    领券