上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象、Q对象、聚合查询等功能。...order_by():对结果进行排序。 返回单个值的过滤器如下: get():返回单个满足条件的对象 如果未找到会引发"模型类.DoesNotExist"异常。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。...,所以mysql执行日志有两次,如下: 限制查询集 可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。...对查询集进行切片后返回一个新的查询集,不会立即执行查询。
上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象、Q对象、聚合查询等功能。...order_by():对结果进行排序。 返回单个值的过滤器如下: get():返回单个满足条件的对象 如果未找到会引发"模型类.DoesNotExist"异常。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。...,所以mysql执行日志有两次,如下: 限制查询集 可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。...” 对查询集进行切片后返回一个新的查询集,不会立即执行查询。
本文从Django官方文档总结而来,将聚合的主要用法和查询集的常见方法做一归纳。 聚合 1....(括号里面有参数),后两者是不返回查询集的方法 。...2.django提供了两种生成聚合的方法 1)从整个查询集生成统计值,主要用法:aggregate(*args, **kwargs) aggregate()是QuerySet 的一个终止子句,也就是说...annotate()子句的返回结果是一个查询集 (QuerySet);这个 QuerySet可以用任何QuerySet方法进行修改,包括 filter(), order_by()。...在你对查询集做求值之前,不会发生任何实际的数据库操作。
本文描述如何使用 Django 查询来处理统计。 本文我们将使用以下模型。...第一种方法是产生整个 查询集 的统计。假设我们要统计所有书的平均价格。...第二种方法是为 查询集 中每个独立的对象生成统计。...) values() 通常,统计会针对 查询集 中每一个对象返回一个结果。...缺省排序或 order_by() 子句的副作用 一个查询集中 order_by() 子句中的字段(或一个模型中缺省排序字段)会对输了数据产生影响,即使在 values() 中没有这些字段的定义时也同样会影响
,返回的是不满足条件的所有数据 order_by是排序,参数是排序字段 aggregate聚合,参数是聚合类,返回的是一个字典 count没有参数,返回查询结果的数量,返回是一个数字 1.2条件查询 注意...order_by 1.7关联查询 1、查询和指定对象关联的数据(重点掌握) 由一查多:一对象.多类名小写__set.all() 由多查一:多对象.外键属性 2、通过模型类进行关联查询 查图书:一类.objects.get...all,filter,exclude,order_by这四个函数返回的是查询集对象 例如:查询id大于3的图书数量 BookInfo.objects.filter(id__gt=3).count() exists...两大特性: 1、惰性查询:只有在使用查询集中的数据时才会进行数据库真正查询操作 2、查询结果的缓存:如果使用同一个查询集时,只有在第一次使用查询集时会进行数据库的查询操作,然后Django框架就会把查询的结果存起来...,下一次再使用这个查询集的时候,使用的是Django之前存储的结果。
('-num_books')[:5] >>> pubs[0].num_books 1323 在查询集上生成聚合 Django提供了两种生成聚合的方法。...第一种方法是从整个查询集生成统计值。比如,你想要计算所有在售书的平均价钱。Django的查询语法提供了一种方式描述所有图书的集合。...annotate()子句的返回结果是一个查询集 (QuerySet);这个 QuerySet可以用任何QuerySet方法进行修改,包括 filter(), order_by(), 甚至是再次应用annotate...例如,根据一本图书作者数量的多少对查询集 QuerySet进行排序: >>> Book.objects.annotate(num_authors=Count('authors')).order_by('...与默认排序或order_by()交互 在查询集中的order_by() 部分(或是在模型中默认定义的排序项) 会在选择输出数据时被用到,即使这些字段没有在values() 调用中被指定。
那么以下将介绍在那些会返回新的QuerySet对象的方法。 filter:将满足条件的数据提取出来,返回一个新的QuerySet。具体的filter可以提供什么条件查询。请见查询操作章节。...order_by:指定将查询的结果根据某个字段进行排序。如果要倒叙排序,那么可以在这个字段的前面加一个负号。...比如提取文章数据,可以使用select_related将author信息提取出来,以后再次使用article.author的时候就不需要再次去访问数据库了。可以减少数据库查询的次数。...,而没有使用filter的,只有两次sql查询 for sql in connection.queries: print(sql) 那如果确实是想要在查询的时候指定过滤条件该如何做呢,这时候我们可以使用...filter,也只会发生两次查询操作。
方法: create() 创建一个新的对象,保存对象,并将它添加到关联对象集之中,返回新创建的对象。...models.Book.objects.annotate(author_num=Count("author")).filter(author_num__gt=1) ]> 示例4:根据一本图书作者数量的多少对查询集...Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。...Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。..., select=None, where=None, params=None, tables=None, order_by=None, select_params=None) # 构造额外的查询条件或者映射
方法 create() 创建一个新的对象,保存对象,并将它添加到关联对象集之中,返回新创建的对象。...models.Book.objects.annotate(author_num=Count("author")).filter(author_num__gt=1) ]> 示例4:根据一本图书作者数量的多少对查询集...Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。...Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。..., select=None, where=None, params=None, tables=None, order_by=None, select_params=None) # 构造额外的查询条件或者映射
2.3 排序 使用order_by对结果进行排序 BookInfo.objects.all().order_by('bread') # 升序 BookInfo.objects.all().order_by...QuerySet 1 概念 Django的ORM中存在查询集的概念。...查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。...对查询集可以再次调用过滤器进行过滤,如 BookInfo.objects.filter(bread__gt=30).order_by('bpub_date') 也就意味着查询集可以含有零个、一个或多个过滤器...,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。
QuerySet 1 概念 Django的ORM中存在查询集的概念。...查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。...对查询集可以再次调用过滤器进行过滤,如 >>> books = BookInfo.objects.filter(readcount__gt=30).order_by('pub_date') >>> books...使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。...对查询集进行切片后返回一个新的查询集,不会立即执行查询。
方法 create() 创建一个新的对象,保存对象,并将它添加到关联对象集之中,返回新创建的对象。...models.Book.objects.annotate(author_num=Count("author")).filter(author_num__gt=1) ]> 示例4:根据一本图书作者数量的多少对查询集.../Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。...Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。..., select=None, where=None, params=None, tables=None, order_by=None, select_params=None) # 构造额外的查询条件或者映射
查询集 QuerySet 查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。...当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。 filter():返回满足条件的数据。 exclude():返回满足条件之外的数据。...order_by():对结果进行排序。...对查询集可以再次调用过滤器进行过滤,如 BookInfo.objects.filter(bread__gt=30).order_by('bpub_date') 从SQL的角度讲,查询集与select语句等价...() 继续执行遍历迭代操作后,才真正的进行了数据库的查询 for book in qs: print(book.btitle) 2>缓存 使用同一个查询集,第一次使用时会发生数据库的查询,然后Django
类的Meta中指定ordering或调用order_by()方法)。...方法 create() 创建一个新的对象,保存对象,并将它添加到关联对象集之中,返回新创建的对象。...models.Book.objects.annotate(author_num=Count("author")).filter(author_num__gt=1) ]> 示例4:根据一本图书作者数量的多少对查询集...Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。...Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。
是用于排序,如果根据字段 a 倒序排序,就是 order_by(“-time”)Test.objects.order_by('name')[0:2]5)链式查询Test.objects.filter(...name=’test’).order_by(“-ctime”)6)多条件参数查询,传字典,构造查询条件data = Test.objects.filter(**query_dict).order_by(...中model查询出来的结构类型为QuerySet,本质是一个查询对象集。...1)将多个查询结果转换为字典列表// all()方法查询出来的是QuerySet,用values方法转成字典集data= Test.objects.all().values()data_dict_list...从DB查询出来的是对象集,可以考虑django-rest-framework 库的serializers类,具体可参考:Tutorial 1: 序列化---查询条件总结字段名__op:__exact 精确等于
但是,如果使用切片语法的step参数,Django将执行数据库查询并返回一个列表。对执行的QuerySet进行切片也会返回一个列表。...重新加载缓存的查询集时,希望结果存在并可用(从数据库读取可能需要一些时间,这违反了缓存的目的)。这意味着当取消缓存QuerySet时,它包含缓存时的结果,而不是数据库中当前的结果。...为了实现这一点,大多数QuerySet方法返回一个新的查询集。本节稍后将详细介绍这些方法。...annotation()的每个参数都是一个注释,将添加到返回的QuerySet中的每个对象。 Django提供的聚合函数在以下聚合函数中进行了描述。...每个order_by()调用清除以前的排序。例如,此查询将_排序日期而不是标题: Entry.objects.order_by('headline').order_by('pub_date')
('price')) {'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')} 为查询集的每个对象生成聚合值...联合聚合Joins and aggregates 目前为止,我们聚合查询的field都属于我们要查询的Model,我们也可以用其它Model的field来进行聚合查询,例如: >>> from django.db.models...(average_rating=Avg('book__rating')) 聚合和其它查询集操作Aggregations and other QuerySet clauses filter() and...在第二个查询中,过滤器在注解之前,所以,在计算注解值时,过滤器就限制了参与运算的对象的范围 order_by() 可以根据聚合值进行排序 >>> Book.objects.annotate(num_authors...=Count('authors')).order_by('num_authors') values() 通常,注解annotate是添加到每一个对象上的,一个执行了注解操作的查询集 QuerySet 所返回的结果中
exclude() 排除满足条件的对象 annotate() 使用聚合函数 order_by() 对查询集进行排序 reverse() 反向排序 distinct() 对查询集去重...dates() 根据日期获取查询集 datetimes() 根据时间获取查询集 none() 创建空的查询集 all() 获取所有的对象 union() 并集 intersection...例如下面的查询将按照pub_date排序,而不是headline: Entry.objects.order_by('headline').order_by('pub_date') 5. reverse(...tzinfo参数定义在截取之前将数据时间转换到的时区。 11. none() 调用none()将创建一个不返回任何对象的查询集,并且在访问结果时不会执行任何查询。...当最初获取数据时不知道是否需要这些特定字段的情况下,如果正在使用查询集的结果,可以告诉Django不要从数据库中检索它们。
order_by order_by:指定将查询的结果根据某个字段进行排序。如果要倒叙排序,那么可以在这个字段的前面加一个负号。...比如提取文章数据,可以使用select_related将author信息提取出来,以后再次使用article.author的时候就不需要再次去访问数据库了。可以减少数据库查询的次数。...,而没有使用filter的,只有两次sql查询 for sql in connection.queries: print(sql) 那如果确实是想要在查询的时候指定过滤条件该如何做呢,这时候我们可以使用...filter,也只会发生两次查询操作 defer defer:在一些表中,可能存在很多的字段,但是一些字段的数据量可能是比较庞大的,而此时你又不需要,比如我们在获取文章列表的时候,文章的内容我们是不需要的...Django将QuerySet转换为SQL语句去执行的五种情况 迭代:在遍历QuerySet对象的时候,会首先先执行这个SQL语句,然后再把这个结果返回进行迭代。
order_by: 对查询的结果进行排序,返回类型也是QuerySet。 以下我们以模型类为stuinfo是实例。...1) order_by实例 查询所有人按照ids从小到大排序 student.objects.all().order_by('id') 查询所有时,可以省略all() student.objects.order_by...2、缓存 当我们使用同一个查询集的时候,只有第一次是执行到数据库,然后把结果储存起来,当我们再次使用这个查询集的时候,就会调用我们缓存中的数据。...查询集相当于一个列表,我们取值可以遍历取出,也可以进行下表或者切片取出。 当我们对一个查询集进行切片或下标查询,会返回一个新的查询集。 不同的是我们的切片不允许为负值。 判断一个查询集是否有数据。...同样我们可以不使用Django帮我们生成的,我们可以自己创建一个。 为什么要自己创建? 1、过滤查询集,比如你查询全部数据,我只让你返回前十条。
领取专属 10元无门槛券
手把手带您无忧上云