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

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

本主题指南介绍如何使用Django查询生成和返回聚合值。...第一种方法是从整个QuerySet生成摘要值。例如,想计算所有在售图书平均价格。Django查询语法提供了一种描述所有藏书方法。 传递给聚合()参数描述了要计算聚合值。...在此示例,将计算Book模型上价格字段平均值。可以在QuerySet引用中找到可用聚合函数列表。 Aggregate()是QuerySet一个结束语句。...在第一个查询,注释优先于过滤器,因此过滤器不会影响注释。Distinct=True用于避免查询错误。 第二个查询查询每个出版商得分超过3图书数量。...很难直观地理解ORM如何将复杂查询集转换为SQL查询。因此,如果有疑问,请使用str(queryset.query)`检查SQL并编写大量测试。

2K40

django 1.8 官方文档翻译: 2-5-4 聚合 (初稿)

比如,你想要计算所有在售书平均价钱。Django查询语法提供了一种方式描述所有图书集合。 >>> Book.objects.all() 我们需要在QuerySet.对象上计算出总价格。...当annotate()子句被指定之后,QuerySet每个对象都会被注上特定值。 这些注解语法都和aggregate()子句所使用相同。...比如,给图书添加作者数量注解: # Build an annotated queryset >>> from django.db.models import Count >>> q = Book.objects.annotate...例如,我们可以查询每个作者,注上它写所有书(以及合著书)一共有多少页(注意我们如何使用 ‘book’来指定Author -> Book多对多反转关系): >>> Author.objects.annotate...例如,根据一本图书作者数量多少对查询集 QuerySet进行排序: >>> Book.objects.annotate(num_authors=Count('authors')).order_by('

1.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

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

数量. >>> from django.db.models import Count >>> pubs = Publisher.objects.annotate(num_books=Count('book...在第二个查询,过滤器在注解之前,所以,在计算注解值时,过滤器就限制了参与运算对象范围 order_by() 可以根据聚合值进行排序 >>> Book.objects.annotate(num_authors...=Count('authors')).order_by('num_authors') values() 通常,注解annotate是添加到每一个对象上,一个执行了注解操作查询集 QuerySet 所返回结果...但是,如果使用了values()从句,它就会限制结果范围,对注解赋值方法就会完全不同。...就不是在原始 QuerySet 返回结果对每个对象添加注解,而是根据定义在 values() 从句中字段组合对先结果进行唯一分组,再根据每个分组算出注解值,这个注解值是根据分组中所有的成员计算而得

1K20

DjangoQuerySet以及Pickle 序列化在Django深度运用详解

async for e in Entry.objects.all(): results.append(e) 部分如限制QuerySet条目数量中所述,可以使用Python数组切片语法对QuerySet...切片未执行QuerySet通常会返回另一个未执行Query Set。但是,如果使用切片语法step参数,Django将执行数据库查询并返回一个列表。...Django为此提供了count()方法。 Pickle 序列化 QuerySet 如果pickle以序列化QuerySet,这将强制在pickle序列化之前将所有结果加载到内存。...表达式可以是简单值、对模型(或任何相关模型)字段引用,或计算QuerySet对象相关对象聚合表达式(平均值、总和等)。...annotation()每个参数都是一个注释,将添加到返回QuerySet每个对象。 Django提供聚合函数在以下聚合函数中进行了描述。

1.7K10

Django+Echarts画图实例

所有演示均基于Django2.0 阅读此篇文章你可以: 了解Djangoaggregate和annotate函数使用方法 获取一个Django+Echarts绘制柱状图完整示例 需求说明 一张会议记录表...取举行会议最多前20个地点:了解一点SQL知识的话就知道需要先要对地点字段进行group by,然后order by desc倒序,最后limit取前20 那么在Django应该如何group by...QuerySet操作了,而annotate函数执行完成后输出QuerySet对象可以继续调用Django内置filter、order_by等函数来完成更加复杂查询计算操作 用到annotate函数逻辑往往比较复杂...event_location" ORDER BY "id__count" DESC 最后limit取前二十,Djangolimit可以直接通过QuerySet结果后加python数组切片语法来实现,...group by + order by + limitORM拼接,我们上边已经详细介绍过了,那么这里只需要在输出结果单独把城市跟数量转成两个列表对应echarts里边需要X轴Y轴数据就可以了

2K20

Django ORM 多表操作(二)

注意:MySQL limit 相当于 ORM QuerySet 数据类型切片,annotate 里面放聚合函数 values 或者 values_list 放在 annotate 前面:...总结 使用annotate()分组,括号内写聚合函数 values在前面,表示SQLgroup by字段 values在后面,表示取出 字段 filter在前面,表示SQLwhere条件 filter...5、统计不止一个写过一本书作者:(书数量大于一) # 4、统计不止一个写过一本书作者:(书数量大于一) res = models.Author.objects.all().annotate...[{'name': '李白', 'book_num': 2}]> 6、根据一本图书作者数量多少对查询集 QuerySet进行排序: res = models.Book.objects.all(...那么查询时候输出还是对应字符串(男,女,其他) 注意:对于choices参数我们该如何选择数据类型?

1K20

DjangoAggregation聚合基本使用方法

如果我要对 QerySet 每个元素都进行聚合计算、并且返回仍然是 QuerySet ,那就要用到 annotate() 方法了。...annotate 翻译过来就是 注解 ,它作用有点像给 QuerySet 每个元素临时贴上一个临时字段,字段值是分组聚合运算结果。...比方说要给查询集中每本书籍都增加一个字段,字段内容是外链到书籍作者数量: from django.db.models import Count q = Book.objects.annotate...() 返回是查询集,那么自然也可以和 filter() 、 exclude() 等查询方法组合使用: b = Book.objects.filter(name__startswith="Django...with each other 总结 到此这篇关于DjangoAggregation聚合基本使用方法就介绍到这了,更多相关Django Aggregation聚合使用内容请搜索ZaLou.Cn以前文章或继续浏览下面的相关文章希望大家以后多多支持

1.1K20

DjangoQuerySet详解

annotate()每个参数都是一个annotation,它将添加到返回QuerySet每个对象。 关键字参数指定Annotation将使用关键字作为Annotation 别名。...结果列表每个datetime.datetime对象被截取到给定类型。 order参数默认为'ASC',或者'DESC'。 它指定如何排序结果。...当最初获取数据时不知道是否需要这些特定字段情况下,如果正在使用查询集结果,可以告诉Django不要从数据库检索它们。...最后建议只在Django视图POST请求中使用get_or_create(),因为这是一个具有修改性质动作,不应该使用在GET请求,那样不安全。...QuerySet通常会在内部缓存其结果,以便在重复计算时不会导致额外查询。而iterator()将直接读取结果,不在QuerySet级别执行任何缓存。

2.3K20

python 终级篇 django --

distinct(): 从返回结果剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复结果。...此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。) count(): 返回数据库匹配查询(QuerySet)对象数量。...键名称是聚合值标识符,值是计算出来聚合值。键名称是按照字段和聚合函数名称自动生成出来。...: 番茄物语>]> 示例4:根据一本图书作者数量多少对查询集 QuerySet进行排序 >>> models.Book.objects.annotate(author_num=Count("author...如果我们要对两个字段值做比较,那该怎么做呢? Django 提供 F() 来做这样比较。F() 实例可以在查询引用字段,来比较同一个 model 实例两个不同字段值。

2.8K20

django queryset相加和筛选教程

聚合aggregate和annotate GROUP BY使用方法 接触django已经很长时间了,但是使用QuerySet查询集方式一直比较低端,只会使用filter/Q函数/exclude等方式来查询...一. aggregate使用方法 今天在同事指点下,仔细看了djangoannotate使用方法,会根据查询条件来动态生成SQL语句,提高组合查询效率。...理解aggregate关键在于理解SQL聚合函数:以下摘自百度百科:SQL基本函数,聚合函数对一组值执行计算,并返回单个值。除了 COUNT 以外,聚合函数都会忽略空值。...有这么一个需求:查询各个消息状态数量。...以上这篇django queryset相加和筛选教程就是小编分享给大家全部内容了,希望能给大家一个参考。

87240
领券