本主题指南介绍如何使用Django查询生成和返回聚合值。...第一种方法是从整个QuerySet生成摘要值。例如,想计算所有在售图书的平均价格。Django的查询语法提供了一种描述所有藏书的方法。 传递给聚合()的参数描述了要计算的聚合值。...在此示例中,将计算Book模型上价格字段的平均值。可以在QuerySet引用中找到可用聚合函数的列表。 Aggregate()是QuerySet的一个结束语句。...在第一个查询中,注释优先于过滤器,因此过滤器不会影响注释。Distinct=True用于避免查询错误。 第二个查询查询每个出版商得分超过3的图书数量。...很难直观地理解ORM如何将复杂的查询集转换为SQL查询。因此,如果有疑问,请使用str(queryset.query)`检查SQL并编写大量测试。
比如,你想要计算所有在售书的平均价钱。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('
的数量. >>> 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() 从句中的字段组合对先结果进行唯一的分组,再根据每个分组算出注解值,这个注解值是根据分组中所有的成员计算而得的
aggregate返回一个字典,包含根据QuerySet 计算得到的聚合值(平均数、和等等)。...每本书和作者是多对多的关系。我们想要汇总QuerySet.中每本书里的这种关系。逐个对象的汇总结果可以由annotate()子句生成。...当annotate()子句被指定之后,QuerySet中的每个对象都会被注上特定的值。这些注解的语法都和aggregate()子句所使用的相同。...annotate()的每个参数都描述了将要被计算的聚合。...exclude():返回一个新的QuerySet,它包含不满足给定的查找参数的对象。 annotate(*args, **kwargs): 使用提供的查询表达式Annotate查询集中的每个对象。
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提供的聚合函数在以下聚合函数中进行了描述。
所有演示均基于Django2.0 阅读此篇文章你可以: 了解Django中aggregate和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取前二十,Django中limit可以直接通过QuerySet结果后加python的数组切片语法来实现,...group by + order by + limit的ORM拼接,我们上边已经详细的介绍过了,那么这里只需要在输出的结果中单独的把城市跟数量转成两个列表对应echarts里边需要的X轴Y轴数据就可以了
注意:MySQL 中的 limit 相当于 ORM 中的 QuerySet 数据类型的切片,annotate 里面放聚合函数 values 或者 values_list 放在 annotate 前面:...总结 使用annotate()分组,括号内写聚合函数 values在前面,表示SQL中group by的字段 values在后面,表示取出 字段 filter在前面,表示SQL中where条件 filter...5、统计不止一个写过一本书的作者:(书数量大于一) # 4、统计不止一个写过一本书的作者:(书数量大于一) res = models.Author.objects.all().annotate...[{'name': '李白', 'book_num': 2}]> 6、根据一本图书作者数量的多少对查询集 QuerySet进行排序: res = models.Book.objects.all(...那么查询的时候输出的还是对应的字符串(男,女,其他) 注意:对于choices参数我们该如何选择数据类型?
如果我要对 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 总结 到此这篇关于Django中Aggregation聚合的基本使用方法就介绍到这了,更多相关Django Aggregation聚合使用内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持
annotate()的每个参数都是一个annotation,它将添加到返回的QuerySet每个对象中。 关键字参数指定的Annotation将使用关键字作为Annotation 的别名。...结果列表中的每个datetime.datetime对象被截取到给定的类型。 order参数默认为'ASC',或者'DESC'。 它指定如何排序结果。...当最初获取数据时不知道是否需要这些特定字段的情况下,如果正在使用查询集的结果,可以告诉Django不要从数据库中检索它们。...最后建议只在Django视图的POST请求中使用get_or_create(),因为这是一个具有修改性质的动作,不应该使用在GET请求中,那样不安全。...QuerySet通常会在内部缓存其结果,以便在重复计算时不会导致额外的查询。而iterator()将直接读取结果,不在QuerySet级别执行任何缓存。
1.5 len() 计算QuerySet元素的数量,并不推荐使用len(),除非QuerySet是求过值的(即evaluated),否则,用QuerySet.count()获取元素数量,这个效率要高。...中的实现 在SQL中,很多关键词在删、改、查时都是可以用的,如order by、 like、in、join、union、and、or、not等等,我们以查询为例,说一下django如何映射SQL的这些关键字的...,字段值只能是聚合函数,因为使用annotate时,会用group by,所以只能用聚合函数。...>>> from django.contrib.auth.models import User >>> from django.db.models import Count #计算每个用户的userjob...数量,字段命名为ut_num,返回的QuerySet中的每个object都有 #这个字段。
每个LSTM层都有四个门: Forget gate Input gate New cell state gate Output gate 下面计算一个LSTM单元的参数: 每一个lstm的操作都是线性操作...这里我们使用LSTM来寻找最终的w_f是[h(t-1), x(t)]的拼接。...如何计算多个cell的参数?...lstm的参数数量 from keras.models import Sequential from keras.layers import Dense, Dropout, Activation from...3,437,600 Non-trainable params: 0 _________________________________________________________________ 下面使用我们上面介绍的公式手动计算
distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。...此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。) count(): 返回数据库中匹配查询(QuerySet)的对象数量。...键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。...: 番茄物语>]> 示例4:根据一本图书作者数量的多少对查询集 QuerySet进行排序 >>> models.Book.objects.annotate(author_num=Count("author...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。
distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。... count(): 返回数据库中匹配查询(QuerySet)的对象数量。...键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。...=Count("author")).filter(author_num__gt=1) ]> 示例4:根据一本图书作者数量的多少对查询集 QuerySet进行排序...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。
中聚合aggregate和annotate GROUP BY的使用方法 接触django已经很长时间了,但是使用QuerySet查询集的方式一直比较低端,只会使用filter/Q函数/exclude等方式来查询...一. aggregate的使用方法 今天在同事的指点下,仔细看了django中annotate的使用方法,会根据查询条件来动态生成SQL语句,提高组合查询的效率。...理解aggregate的关键在于理解SQL中的聚合函数:以下摘自百度百科:SQL基本函数,聚合函数对一组值执行计算,并返回单个值。除了 COUNT 以外,聚合函数都会忽略空值。...有这么一个需求:查询各个消息状态的数量。...以上这篇django queryset相加和筛选教程就是小编分享给大家的全部内容了,希望能给大家一个参考。
使用 Python 的切片语法可以限制 QuerySet 的实例数量,ORM 会将翻译成 SQL 的 LIMIT 和 OFFSET 子句,下面是几个例子: 放回 QuerySet 的前 5 个元素 返回...`title` = ‘blog2') F 查询 F 查询主要用来处理表中字段之间的比较,例如查询 blog 表中 title=conent 的记录。同时 F 查询还支持计算(加减乘除)。...`id` ORDER BY NULL # 使用 values 方法,会按照 values 中传入的属性分组 blogs = Blog.objects.values('title').annotate...`content` ORDER BY NULL extra 如何一些查询比较复杂可以考虑使用 extra 方法。...一些优化 如果只需要判断实例是否存在,使用 exists 更高效 如果只需要得到实例的数量,使用 count 函数
Queryset queryset技巧 #1 aggregate models.py from django.db import models class Author(models.Model):...计算整个queryset的值,相当于count(). annotate 对于 queryset 中的每个值在指定的属性上进行汇总,相当于group_by >>> from django.db.models...import Count >>> pubs = Publisher.objects.annotate(num_books=Count('book')) >>> pubs , , ...]> >>> pubs[0].num_books 73 annotate返回的是一个queryset对象,queryset...对象中的每一个obj新增了一个属性(这里新增了num_books属性),这个属性的值就是这个对象Count(‘book’)的结果,即,每个obj对象的num_books值是这个对象中book的个数
4、这个例子中的CREATE TABLE SQL 语句使用PostgreSQL 语法格式,要注意的是Django 会根据settings 中指定的数据库类型来使用相应的SQL 语句。....annotate(num_authors=Count('authors')) .filter(num_authors__gt=1) (5) 根据一本图书作者数量的多少对查询集 QuerySet...).annotate(Min('price')) 1.annotate(*args,**kwargs):可以为QuerySet中的每个对象添加注解。...2.aggregate(*args,**kwargs):通过对QuerySet进行计算,返回一个聚合值的字典,aggregate()中每个参数都可以指定一个包含在字典中的返回值。...(例如,遍历 QuerySet,在每个对象上调用 delete()方法),而不是使用 QuerySet 中的 delete()方法。
领取专属 10元无门槛券
手把手带您无忧上云