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

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

网站:http://python.usyiyi.cn/django/index.html 聚合 Django数据库抽象API描述了使用Django查询来增删查改单个对象方法。...第一种方法是从整个查询生成统计值。比如,你想要计算所有在售书平均价钱。Django查询语法提供了一种方式描述所有图书集合。...在第二个查询中,过滤器在注解之前,所以,在计算注解值时,过滤器就限制了参与运算对象范围。 order_by() 注解可以用来做为排序项。...不是在原始 QuerySet返回结果中对每个对象中添加注解,而是根据定义在values() 子句中字段组合对先结果进行唯一分组,再根据每个分组算出注解值, 这个注解值是根据分组中所有的成员计算而得...Item.objects.values("data").annotate(Count("id")) …这部分代码想通过使用它们公共 data 值来分组 Item对象,然后在每个分组中得到 id 值总数

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

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

聚合 Django数据库抽象API描述了使用Django查询来添加、删除、查询和修改单个对象方法。然而,有时需要根据一组对象聚合您想要获得值。...应用于公共模型字段任何过滤器()(或exclude())都将具有约束被认为是聚合对象效果。 当使用annotate()子句时,过滤具有约束注释对象计算效果。...在第一个查询中,注释优先于过滤器,因此过滤器不会影响注释。Distinct=True用于避免查询错误。 第二个查询查询每个出版商得分超过3图书数量。...过滤器优先于注释,因此过滤器限制了计算注释时要考虑对象。 第一个查询请求具有至少一本得分大于3平均得分。第二个查询仅请求得分超过3作者书平均分数。...很难直观地理解ORM如何将复杂查询转换为SQL查询。因此,如果有疑问,请使用str(queryset.query)`检查SQL并编写大量测试。

2K40

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

('price')) {'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')} 为查询每个对象生成聚合值...但是第一个查询注解包含其该出版商发行所有图书总数;而第二个查询注解只包含出版过好书出版商所发行好书(评分大于3分)总数。在第一个查询中,注解在过滤器之前,所以过滤器对注解没有影响。...在第二个查询中,过滤器在注解之前,所以,在计算注解值时,过滤器就限制了参与运算对象范围 order_by() 可以根据聚合值进行排序 >>> Book.objects.annotate(num_authors...=Count('authors')).order_by('num_authors') values() 通常,注解annotate是添加到每一个对象,一个执行了注解操作查询 QuerySet 所返回结果中...就不是在原始 QuerySet 返回结果中对每个对象中添加注解,而是根据定义在 values() 从句中字段组合对先结果进行唯一分组,再根据每个分组算出注解值,这个注解值是根据分组中所有的成员计算而得

1K20

查询 QuerySet和管理器Mana

查询 QuerySet 查询,也称查询结果、QuerySet,表示从数据库中获取对象集合。...当调用如下过滤器方法时,Django会返回查询(而不是简单列表): all():返回所有数据。 filter():返回满足条件数据。 exclude():返回满足条件之外数据。...对查询可以再次调用过滤器进行过滤,如 BookInfo.objects.filter(bread__gt=30).order_by('bpub_date') 从SQL角度讲,查询与select语句等价...() 继续执行遍历迭代操作后,才真正进行了数据库查询 for book in qs: print(book.btitle) 2>缓存 使用同一个查询,第一次使用时会发生数据库查询,然后Django...qs = BookInfo.objects.all()[0:2] 管理器manager 自定义manager 注意:一旦为模型类指明自定义过滤器后,Django不再生成默认管理对象objects。

1K40

django 1.8 官方文档翻译: 2-5-1 管理器 (初稿)

这个例子要注意一点是: 管理器方法可以访问 self.model来得到它所用到模型类。 修改管理器初始查询 管理器自带 查询返回系统中所有的对象。...由于 get_queryset() 返回是一个 查询 对象,所以你仍可以对它使用 filter(), exclude()和其他 查询方法。...这是因为 Django 要能从关联对象中获得数据,但这些数据有可能被默认管理器过滤掉,或是无法进行访问。...创建管理器 * django 1.7 中新增 * 对于上面的例子,同一个方法需要在查询 和 管理器上创建两份副本,作为替代,QuerySet.as_manager()可以创建一个管理器实例,它拥有自定义查询方法...并不是每个查询方法都在管理器层面上有意义。比如 QuerySet.delete(),我们有意防止它复制到管理器 中。 方法按照以下规则进行复制: 公共方法默认被复制。

95520

django模型

过滤器基于所给参数限制查询结果。 从SQL 角度,查询和SELECT 语句等 价,过滤器是像WHERE 和LIMIT 一样限制子句。 你可以从模型管理器那里取得查询。...可以使用管理器all() 方法: all()方法返回包含数据库中所有对象一个查询 all_users = User.objects.all() 使用过滤器获取特定对象 all() 方法返回了一个包含数据库表中所有记录查询...查询参数(上面函数定义中**kwargs)需要满足特定格式,下面字段查询一节中会提 到 使用过滤器获取特定对象示例 要获取年份为2006所有文章查询,可以使用filter()方法: Entry.objects.filter...最后结果仍然是一个查询,它包含标题以”What“开 头、发布日期在2005年1月30日至当天之间所有记录 过滤查询是独立 每次你筛选一个查询,得到都是全新另一个查询,它和之前查询之间没有任何绑...你可以将过滤器保持一整 天,直到查询 需要求值时,Django 才会真正运行这个查询

3.1K20

django 1.8 官方文档翻译: 2-2-1 执行查询

使用过滤器获取特定对象 all()方法返回结果集中包含全部对象,但是更普遍情况是你需要获取完整集合一个子集。 要创建这样一个子集,需要精炼上面的结果,增加一些过滤器作为条件。...过滤结果是独立 每次你筛选一个结果,得到都是全新另一个结果,它和之前结果之间没有任何绑定关系。每次筛选都会创建一个独立结果,可以被存储及反复使用。...对 QuerySet 求值就意味着 Django 会访问数据库。想了解对查询何时求值,请查看 何时对查询求值 (When QuerySets are evaluated)....()[5:10] Django 不支持对查询做负数索引 (例如 Entry.objects.all()[-1]) 。...将某个特定对象从被关联对象集合中去除。 clear() 清空被关联对象集合。 想一次指定关联集合成员,那么只要给关联集合分配一个可迭代对象即可。它可以包含对象实例,也可以只包含主键值。

4.3K20

Django—模型

4.查询 查询表示从数据库中获取对象集合,在管理器上调用某些过滤器方法会返回查询查询可以含有零个、一个或多个过滤器。...过滤器基于所给参数限制查询结果,从Sql角度,查询和select语句等价,过滤器像where和limit子句。 返回查询过滤器如下: all():返回所有数据。...缓存:使用同一个查询,第一次使用时会发生数据库查询,然后把结果缓存下来,再次使用这个查询时会使用缓存数据。 查询缓存 每个查询都包含一个缓存来最小化对数据库访问。...在新建查询集中,缓存为空,首次对查询求值时,会发生数据库查询django会将查询结果存在查询缓存中,并返回请求结果,接下来对查询求值将重用缓存中结果。...限制查询 可以对查询进行取下标或切片操作,等同于sql中limit和offset子句。   注意:不支持负数索引。 对查询进行切片后返回一个新查询,不会立即执行查询

6.1K21

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

切片未执行QuerySet通常会返回另一个未执行Query Set。但是,如果使用切片语法step参数,Django将执行数据库查询并返回一个列表。...Pickle序列化通常用作缓存前奏。重新加载缓存查询时,希望结果存在并可用(从数据库读取可能需要一些时间,这违反了缓存目的)。...为了实现这一点,大多数QuerySet方法返回一个新查询。本节稍后将详细介绍这些方法。...QuerySet类具有以下公共属性,可用于内省: 有序 True如果QuerySet是有序–有一个order_by()子句或模型默认排序。否则,这是错误。...annotation()每个参数都是一个注释,将添加到返回QuerySet中每个对象Django提供聚合函数在以下聚合函数中进行了描述。

1.7K10

Django篇(二)

查询函数 我们在Django中通过:模型类.objects属性调用以下函数来进行查询 get: 返回表中满足条件一条数据,有且只能有一条,查询多条会报异常。 查询不到数据也会报异常。...Q对象 以上我们都是单个条件进行查询,那如果多个条件呢? 我们可以在上面获取对象再次进行筛选,也就是注意中说那句话,但是很麻烦。 因此Django为我们提供了Q模块来帮助我们多条件查询。...查询相当于一个列表,我们取值可以遍历取出,也可以进行下表或者切片取出。 当我们对一个查询进行切片或下标查询,会返回一个新查询。 不同是我们切片不允许为负值。 判断一个查询是否有数据。...同样查询方式。 管理器 什么是管理器? 我们每次查询时候都会是模型.objects.xxx。 这个objects是Django帮我们自动生成管理器对象。通过objects来帮助我们查询信息。...1、过滤查询,比如你查询全部数据,我只让你返回前十条。 2、添加新方法,比如添加,修改可以封装在里面方面我们使用。

1.3K20

django模型类管理器——数据库操作封装详解

自定义管理器类主要用于两种情况: 1.修改原始查询,重写all()方法 2.向管理器类中添加额外方法,如向数据库中插入数据。 1.修改原始查询,重写all()方法。...#图书管理器 class BookInfoManager(models.Manager): def all(self): #默认查询未删除图书信息 #调用父类成员语法为:super().方法名...答:objects是Django帮我自动生成管理器对象,通过这个管理器可以实现对数据查询。...自定义管理器类应用场景 1.改变查询结果。 比如调用BookInfo.books.all()返回是没有删除图书数据。 2.添加额外方法。...,重新打开项目的shell,进行查询之后就获取到了4条数据(过滤掉了一条) ?

1.3K10

第 9 篇:实现分类、标签、归档日期接口

具体来说,获取博客文章发表时间归档列表方法是调用查询(QuerySet) dates 方法,提取记录中日期。...对于这样场景,我们可以在请求 API 时加上查询参数,django-rest-framework 解析查询参数,然后从全部文章列表中过滤查询所指定文章列表再返回。...既然要使用它,当然是先安装它(已安装跳过):pipenv install django-filter 接着我们来配置 PostViewSet,为其设置用于过滤返回结果一些属性,代码如下: from...中定义过滤规则来过滤查询结果。...可以看到右上角多了个过滤器(红框圈部分)。 点击会弹出过滤参数输入交互面板,在这里可以交互式地输入查询过滤参数值。

2.6K30

【愚公系列】2022年01月 Python教学课程 42-Django框架之ORM中查询详解

文章目录 一、基础条件查询 1.基本查询 2.过滤查询 3.F和Q对象 4.聚合函数和排序函数 5.关联查询 6.查询QuerySet ---- 一、基础条件查询 1.基本查询 get查询单一结果,如果不存在会抛出模型类...答:使用F对象,被定义在django.db.models中。 语法如下: F(属性名) 例:查询阅读量大于等于评论量图书。...查询,也称查询结果、QuerySet,表示从数据库中获取对象集合。 当调用如下过滤器方法时,Django会返回查询(而不是简单列表): all():返回所有数据。...过滤器基于所给参数限制查询结果。 从SQL角度讲,查询与select语句等价,过滤器像where、limit、order by子句。...使用同一个查询,第一次使用时会发生数据库查询,然后Django会把结果缓存下来,再次使用这个查询时会使用缓存数据,减少了数据库查询次数。

1.9K40

Django 2.1.7 查询 QuerySet

上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型介绍F对象、Q对象、聚合查询等功能。...其中查询具有缓存、返回多个值、返回单个值、对查询切片处理等功能。...参考文献 https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/#caching-and-querysets 返回查询过滤器如下:...返回单个值过滤器如下: get():返回单个满足条件对象 如果未找到会引发"模型类.DoesNotExist"异常。...在新建查询集中,缓存为空,首次对查询求值时,会发生数据库查询django会将查询结果存在查询缓存中,并返回请求结果,接下来对查询求值将重用缓存中结果。

1.1K10

Django 2.1.7 查询 QuerySet

上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型介绍F对象、Q对象、聚合查询等功能。...其中查询具有缓存、返回多个值、返回单个值、对查询切片处理等功能。...参考文献 https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/#caching-and-querysets 返回查询过滤器如下:...返回单个值过滤器如下: get():返回单个满足条件对象 如果未找到会引发"模型类.DoesNotExist"异常。...在新建查询集中,缓存为空,首次对查询求值时,会发生数据库查询django会将查询结果存在查询缓存中,并返回请求结果,接下来对查询求值将重用缓存中结果。

74420

Django中数据库相关操作

答:使用F对象,被定义在django.db.models中。 语法如下: F(属性名) 例:查询阅读量大于等于评论量图书。...查询,也称查询结果、QuerySet,表示从数据库中获取对象集合。 当调用如下过滤器方法时,Django会返回查询(而不是简单列表): all():返回所有数据。...对查询可以再次调用过滤器进行过滤,如 BookInfo.objects.filter(bread__gt=30).order_by('bpub_date') 也就意味着查询可以含有零个、一个或多个过滤器...过滤器基于所给参数限制查询结果。 从SQL角度讲,查询与select语句等价,过滤器像where、limit、order by子句。...,第一次使用时会发生数据库查询,然后Django会把结果缓存下来,再次使用这个查询时会使用缓存数据,减少了数据库查询次数。

2.2K50

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

理解查询 理解查询(QuerySets) 是通过简单代码获取较好性能至关重要一步。特别是: 理解查询计算 要避免性能问题,理解以下几点非常重要: QuerySets是延迟。...在数据库中而不是Python中做数据库工作 比如: 在最基础层面上,使用过滤器和反向过滤器对数据库进行过滤。 使用F 表达式在相同模型中基于其他字段进行过滤。 使用数据库中注解和聚合。...其次,如果很多对象匹配查询查询会更慢一些;列上唯一性约束确保这种情况永远不会发生。...一次性检索你需要任何东西 在不同位置多次访问数据库,一次获取一个数据,通常来说不如在一次查询中获取它们更高效。如果你在一个循环中执行查询,这尤其重要。...如果一个模型具有默认顺序(Meta.ordering),并且你并不需要它,通过在查询上无参调用order_by() 来移除它。 向你数据库添加索引可能有助于提升排序性能。

1.1K30

Django模型model

: 根据对象类型生成数据库表结构 将对象、列表操作,转换为sql语句 将sql查询结果转换为对象、列表 Django模型包含存储数据字段和约束,对应着数据库中唯一表 ORM.png 2....模型类查询 查询表示从数据库中获取对象集合 查询可以含有零个、一个或多个过滤过滤器基于所给参数限制查询结果 从Sql角度,查询和select语句等价,过滤器像where和limit子句...接下来主要讨论如下知识点 查询 字段查询:比较运算符,F对象,Q对象(1)模型类查询集合 在管理器上调用过滤器方法会返回查询 查询经过过滤器筛选后返回新查询,因此可以写成链式过滤 惰性执行:...创建查询不会带来任何数据库访问,直到调用数据时,才会访问数据库 何时对查询求值:迭代,序列化,与if合用 返回查询方法,称为过滤器,管理器对象方法有all()、filter()、exclude..."异常 count():返回当前查询总条数 first():返回第一个对象 last():返回最后一个对象 exists():判断查询集中是否有数据,如果有则返回True 限制查询,如果获取一个对象

11210
领券