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

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

第一种方法是从整个查询生成统计。比如,你想要计算所有在售书的平均价钱。Django查询语法提供了一种方式描述所有图书的集合。...查询参考中列出了聚合函数的列表。 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值的字典。键的名称是聚合的标识符,是计算出来的聚合。...一个annotate() 子句作用于某个查询,要根据查询的状态才能得出注解,而状态由 annotate() 位置所决定。...例如,根据一本图书作者数量的多少查询 QuerySet进行排序: >>> Book.objects.annotate(num_authors=Count('authors')).order_by('...这是因为默认排序项中的 name也是一个分组项,所以这个查询会根据非重复的 (data, name) 进行分组,而这并不是你本来想要的结果。

1.6K30

Django 数据统计查询

本文描述如何使用 Django 查询来处理统计。 本文我们将使用以下模型。...aggregate() 是一个 查询 的未端子句,调用后会返回一个由名称-配对组成的字典。名称是指统计的名称,就是统计的。名称由字段名称配双下划线加上函数名自动组成。...定义一个 annotate() 子句后, 查询 中的每个对象就可以与特定关联,相当于每个对象有一个 “注释”。 这种注释的语法与 aggregate() 相同。...定义一个 annotate() 子句后, 查询 中的每个对象就可以与特定关联,相当于每个对象有一个 “注释”。 这种注释的语法与 aggregate() 相同。...第一个查询中统计先于过滤器,所以过滤器统计没有作用。而第二个查询过滤器先于统计,所以统计的对象是已经过滤过的。 order_by() 统计可以作为排序的基础。

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

django模型

每个模型 应数据库中唯一的一张表 如何编写模型 模型:每个模型都用一个类表示,该类继承自django.db.models.Model。...但在通常情况下,你往往想要获取 的是完整数据一个子集。 要创建这样一个子集,你需要在原始的的查询上增加一些过滤条件。...最后的结果仍然是一个查询,它包含标题以”What“开 头、发布日期在2005年1月30日至当天之间的所有记录 过滤后的查询是独立的 每次你筛选一个查询,得到的都是全新的另一个查询,它和之前的查询之间没有任何绑...当你确实需要结果查询 通过访问数据库来求值 获取一个单一的对象——get() filter() 始终给你一个查询,即使只有一个对象满足查询条件 —— 这种情况下,查询包含一个元素。...如果您在某些情 况下使用查询的结果,您最初获取数据不知道是否需要这些特定字段,可以告诉 Django不要从数据库中检索它们。

3.1K20

Django之QuerySet详解

exclude() 排除满足条件的对象 annotate() 使用聚合函数 order_by() 查询进行排序 reverse() 反向排序 distinct() 查询去重...它指定如何排序结果。 tzinfo参数定义在截取之前将数据时间转换到的时区。 11. none() 调用none()将创建一个不返回任何对象的查询,并且在访问结果不会执行任何查询。...使用这种方法作为最后的手段,这是一个旧的API,在将来的某个时候可能被弃用。仅无法使用其他查询方法表达查询才使用它。 例如: >>> qs.extra( ......最初获取数据不知道是否需要这些特定字段的情况下,如果正在使用查询的结果,可以告诉Django不要从数据库中检索它们。...11. first() 返回结果的第一个对象, 没有找到时返回None。如果QuerySet没有设置排序,则将会自动按主键进行排序

2.3K20

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

在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来项目进行排序,还需要按其他某种动态数据项目进行排序。Djngo聚合就能满足这些要求。...参数distinct=True,返回unique的对象数目。 Max # 返回最大 Min # 返回最小....但是第一个查询的注解包含其该出版商发行的所有图书的总数;而第二个查询的注解包含出版过好书的出版商的所发行的好书(评分大于3分)总数。在第一个查询中,注解在过滤器之前,所以过滤器注解没有影响。...在第二个查询中,过滤器在注解之前,所以,在计算注解,过滤器就限制了参与运算的对象的范围 order_by() 可以根据聚合进行排序 >>> Book.objects.annotate(num_authors...这是因为默认排序项中的name也是一个分组项,所以这个查询会根据非重复的(data,name)进行分组,而这并不是你本来想要的结果。

1.1K20

Web | Django 与数据库交互,你需要知道的 9 个技巧

查询的结果变为具名元组(QuerySet results as namedtuples) 我是一个 namedtuples 的粉丝,同时也是 Django 2.0 的 ORM 的粉丝。...限制(Limit) 这与设置边界的最后一点有些相关。有时我们的客户的一些行为是不可预知的。比如,同一用户打开另一个选项卡并在第一次尝试「卡住」再试一次并不罕见。...我们增加了限制,但我们仍然有一个问题 -- 用户想要所有的数据,但我们给了他们 100 个,用户现在认为只有 100 个数据了。...一旦我们问题有了更好的理解,我们就开始寻找锁定必要表(事务表)的方法。...auto_now_add=True, ) 使用 auto_now_add Django 将自动使用当前时间填充该行的时间。

2.8K40

django_2

要求 修改数据库 Django shell 数据级联(一多) 元信息 定义字段 模型过滤 创建对象4种方式 查询 过滤器 获取单个对象 字段查询 时间 聚合函数 跨关系查询 F对象 Q对象...,可以实现字段的约束 ·在字段对象通过关键字参数指定 ·null ·如果为True,Django 将空以NULL 存储到数据库中,默认是 False ·blank...第二个参数是limit 懒查询/缓存 查询的缓存:每个查询都包含一个缓存,来最小化对数据库的访问 在新建的查询集中,缓存首次为空,第一次查询求值,会发生数据缓存,django会将查询出来的数据做...get 不存在会抛异常 DoesNotExist 存在多于一个 MultipleObjectsReturned 使用这个函数 记得捕获异常 last 返回查询种的最后一个对象 first...自动设置该字段为当前时间, 用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false ·DateField.auto_now_add ·对象第一次被创建自动设置当前时间

3.6K30

Django 聚合与查询API实现侧边栏

2.django提供了两种生成聚合的方法 1)从整个查询生成统计,主要用法:aggregate(*args, **kwargs) aggregate()是QuerySet 的一个终止子句,也就是说...每本书和作者是多多的关系。我们想要汇总QuerySet.中每本书里的这种关系。逐个对象的汇总结果可以由annotate()子句生成。...annotate()子句被指定之后,QuerySet中的每个对象都会被注上特定的。这些注解的语法都和aggregate()子句所使用的相同。...annotate()子句的返回结果是一个查询 (QuerySet);这个 QuerySet可以用任何QuerySet方法进行修改,包括 filter(), order_by()。...在你查询做求值之前,不会发生任何实际的数据库操作。

1.4K20

Django篇(二)

order_by: 查询的结果进行排序,返回类型也是QuerySet。 以下我们以模型类为stuinfo是实例。...('id') 查询所有人按照ids从大到小排序 student.objects.all().order_by('-id') 也可以根据多个字段排序 根据id和age进行排序 student.objects.all...count函数 查询所有人的数目也可以这样写 student.objects.all().count() 注意:返回类型为QuerySet类型,我们称他为一个查询,可以再次进行以上任何操作。...查询相当于一个列表,我们取值可以遍历取出,也可以进行下表或者切片取出。 当我们一个查询进行切片或下标查询,会返回一个新的查询。 不同的是我们的切片不允许为负值。 判断一个查询是否有数据。...1、过滤查询,比如你查询全部数据,我让你返回前十条。 2、添加新的方法,比如添加,修改可以封装在里面方面我们使用。

1.4K20

django 1.8 官方文档翻译: 2-6-4 数据库访问优化

一次性检索你需要的任何东西 在不同的位置多次访问数据库,一次获取一个数据,通常来说不如在一次查询中获取它们更高效。如果你在一个循环中执行查询,这尤其重要。...不要获取你不需要的东西 使用QuerySet.values()和values_list() 当你仅仅想要一个带有的字典或者列表,并不需要使用ORM模型对象,可以适当使用values()。...另外,建立起一个带有延迟字段的模型,要意识到一些(小的、额外的)消耗会在Django内部产生。...直接使用外键的 如果你仅仅需要外键当中的一个,要使用对象上你已经取得的外键的,而不是获取整个关联对象再得到它的主键。...如果一个模型具有默认的顺序(Meta.ordering),并且你并不需要它,通过在查询上无参调用order_by() 来移除它。 向你的数据库添加索引可能有助于提升排序性能。

1.1K30

django 1.8 官方文档翻译:2-1-1 模型语法

一关系 OneToOneField用来定义一一关系。 用法和其他字段类型一样:在模型里面做为类属性包含进来。 某个对象想扩展自另一个对象,最常用的方式就是在这个对象的主键上添加一一关系。...模型实例需要强制转换并显示为普通的字符串,Python 和Django 将使用这个方法。最明显是在交互式控制台或者管理站点显示一个对象的时候。 将将永远想要定义这个方法;默认的方法几乎没有意义。...get_absolute_url() 它告诉Django 如何计算一个对象的URL。Django 在它的管理站点中使用到这个方法,在其它任何需要计算一个对象的URL 也将用到。...Overridden model methods are not called on bulk operations 注意,使用查询批量删除对象,将不会为每个对象调用delete() 方法。...查询始终返回请求的模型 也就是说,没有办法让DJango查询Person对象返回MyPerson对象。Person 对象的查询集会返回相同类型的对象。

4.9K20

Django MVT之M

1)参数auto_now表示每次保存对象,自动设置该字段为当前时间,用于”最后一次修改”的时间戳,它总是使用当前日期,默认为false。...QuerySet对象 参数为查询条件。 exclude 返回表中不满足条件的数据。 QuerySet对象 参数为查询条件。 order_by 查询结果进行排序。...缓存: 使用的是同一个查询,第一次使用的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个查询,使用的是缓存中的结果。...可以对一个查询进行取下标或切片操作,切片操作会产生一个新的查询。与python的列表不同的是,下标不允许为负数。...StudentInfo.objects.filter(~Q(id__gt=3)) 聚合 QuerySet对象调用aggregate方法表示 查询结果进行聚合操作,返回的是一个字典,使用前需导入相应的聚合类

1K10

django 1.8 官方文档翻译: 2-5-7 自定义查找

现在让我们深入观察这个实现,首先需要的属性是lookup_name。这需要让ORM理解如何去解释name__ne,以及如何使用NotEqual来生成SQL。...最后我们用将这些部分组合成SQL表达式,然后将所有参数用在查询中。然后我们返回一个元组,包含生成的SQL字符串以及参数。...比如,你想过滤一个基于左右侧相等比较操作的查询,在执行一些SQL函数之后它们是大小写不敏感的。 让我们测试一下这一大小写不敏感的转换的简单示例。...编译一个查询的时候,Django首先寻找as_%s % connection.vendor方法,然后回退到 as_sql。...Django如何决定使用查找还是转换 有些情况下,你可能想要动态修改基于传递进来的名称, Transform 或者 Lookup哪个会返回,而不是固定它。

47930

django 1.8 官方文档翻译: 3-4-2 内建显示视图

然而,通过使用queryset来定义一个过滤的对象列表,你可以更加详细 的了解哪些对象将会被显示的视图中(参见执行查询来获取更多关于查询对象的更信息,以及参见 基于类的视图参考来获取全部 细节)。...我们可能想要对图书列表按照出版日期进行排序来选择一个简单的例子,并且把 最近的放到前面: from django.views.generic import ListView from books.models...当然,你通常想做的不仅仅只是 对对象列表进行排序。...前面我们把出版 商的名字硬编码到URLconf中,但是如果我们想要编写一个视图来展示任何publisher的所有 图书,应该如何处理?...,其中主键用于过滤查询

1.4K40

django 1.8 官方文档翻译: 2-1-1 模型语法(初稿)

某个对象想扩展自另一个对象,最常用的方式就是在这个对象的主键上添加一一关系。 OneToOneField 需要一个位置参数:与 model 关联的类。...这是因为 Django 会对每个 SQL 查询的数据库名称和列名称做重编码,至于如何编码视你所用的数据库而定。...很多应用来说,这种继承方式正是你想要的。它提供一种在 Python 语言层级上提取公共信息的方式,但在数据库层级上,各个子类仍然创建一个数据库。...查询返回请求所使用的 model (Querysets still return the model that was requested) 无论你何时查询 User 对象,Django 都不会返回...针对 User 对象的查询返回 User 对象。代理对象的精要就在于依赖原始 User 的代码仅对它自己有效,而你自己的代码就使用你扩展的内容。

3.1K30

Django框架学习(四)

,返回的是不满足条件的所有数据 order_by是排序,参数是排序字段 aggregate聚合,参数是聚合类,返回的是一个字典 count没有参数,返回查询结果的数量,返回是一个数字 1.2条件查询 注意...:可以写多个查询条件,默认是且的关系 对应get,filter,exclude参数中可以写查询条件 格式:属性名__条件名= 1.3F对象 用于查询字段之间的比较 from django.db.models...import Count, Sum,Avg,Max,Min aggregate 1.6排序 默认是升序,如果想要降序,在查询字段前写减号。...|filter(多类名__字段__条件=) 查英雄:多类.objects.filter(外键属性__字段__条件=) 2.查询 注意:对于queryset类的对象,可以继续调用之前的任何一个查询函数...两大特性: 1、惰性查询:只有在使用查询集中的数据才会进行数据库真正查询操作 2、查询结果的缓存:如果使用同一个查询,只有在第一次使用查询时会进行数据库的查询操作,然后Django框架就会把查询的结果存起来

1.5K41

三、模型(一)

所有的模型都自动拥有一个 objects 管理器;你可以在想要查找数据使用它。 最后,还有 all() 方法。这个方法返回返回数据库中所有的记录。...我们还没有告诉数据库 怎样结果进行排序,所以我们返回的结果是无序的。 在你的 Django 应用中,你或许希望根据某字段的检索结果排序,比如说,按字母顺序。...如果你设置了这个选项,那么除非你检索特意额外地使用了 order_by(),否则,当你使用 Django 的数据库 API 去检索,Publisher对象的相关返回默认地都会按 name 字段排序...连锁查询 我们已经知道如何对数据进行过滤和排序。 当然,通常我们需要同时进行过滤和排序查询的操作。...在上面的例子中,这个是2。 删除对象 删除数据要谨慎! 为了预防误删除掉某一个表内的所有数据,Django要求在删除表内所有数据显示使用all()。

4.5K90

Django项目知识点(四)

随便新建一个Django项目,默认会自动为我们创建一个/project_name/urls.py文件,并且自动包含下面的内容,这就是项目的根URL: 配置media媒体文件 settings.py #...比如:想要查询所有评论的数据,可以这么写: Comments.objects.all() # 可切片 Comments.objects.all()[0:1] # 可迭代 for coment in comments...exclude() 排除满足条件的对象 annotate() 使用聚合函数 order_by() 查询进行排序 reverse() 反向排序 distinct() 查询去重...dates() 根据日期获取查询 datetimes() 根据时间获取查询 none() 创建空的查询 all() 获取所有的对象 union() 并 intersection...当我们需要对查询(queryset)的某些字段进行计算或进行先分组再计算或排序, 我们就需要使用aggregate和annotate方法了。

1.6K30
领券