使用ORM完成模型的CRUD操作 在了解了Django提供的模型管理平台之后,我们来看看如何从代码层面完成对模型的CRUD(Create / Read / Update / Delete)操作。...说明2:查询多个对象的时候返回的是QuerySet对象,QuerySet使用了惰性查询,即在创建QuerySet对象的过程中不涉及任何数据库活动,等真正用到对象时(求值QuerySet)才向数据库发送SQL...说明3:可以在QuerySet上使用update()方法一次更新多个对象。...index_together 设定一起建立索引的多个字段名 verbose_name 为对象设定人类可读的名称 verbose_name_plural 设定对象的复数名称 查询参考 按字段查找可以用的条件.../ iregex:基于正则表达式的模糊匹配查询 Q对象(用于执行复杂查询)的使用: >>> from django.db.models import Q >>> Emp.objects.filter(
此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。) count(): 返回数据库中匹配查询(QuerySet)的对象数量。...Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。...filter() 等方法中的关键字参数查询都是一起进行“AND” 的。 ...如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象。...所有提供给查询函数的参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。 例如:查询出版年份是2017或2018,书名中带物语的所有书。
一般操作 专业官网文档 必会13条查询 all(): 查询所有结果 filter(**kwargs): 它包含了与所给筛选条件相匹配的对象.../Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。...如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象。...[('番茄物语',)]> 查询函数可以混合使用Q 对象和关键字参数。...所有提供给查询函数的参数(关键字参数或Q 对象)都将”AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。 例如:查询出版年份是2017或2018,书名中带物语的所有书。
2.QuerySet对象 查询的结果集就是一个QuerySet对象 QuerySet对象就像是一个列表,列表存储着查询出的结果,可以迭代,可以切片 Django中QuerySet对象是惰性的,即你得到这个对象的时候并没有真正的在数据库中执行...QuerySet对象的使用是有cache缓存的,即遍历第二次QuerySet对象的时候数据是从缓存中拿的,不会执行SQL语句 如果QuerySet对象数据量特别大,遍历时为了避免占用大量cache空间,...').annotate(Max('num')) 7.F查询 执行F查询前还得先引入 from django.db.models import F F查询可以将对象中的值作为变量使用,例如: result...1)) 相当于用Q将条件封装,在Q对象之间使用&或者|或者~ 如果想将普通发关键字参数查询与Q查询一起使用,必须将关键字参数查询放到Q的后边 9.扩展查询extra Django 的查询语法难以简练地表达复杂的...WHERE 子句,于是使用扩展查询extra,其原理相当于给SQL语句中添加子语句 extra(select=None, where=None, params=None, tables=None, order_by
Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。...如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象。...[('番茄物语',)]> 查询函数可以混合使用Q 对象和关键字参数。...所有提供给查询函数的参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。 例如:查询出版年份是2017或2018,书名中带物语的所有书。...Django ORM执行原生SQL # extra # 在QuerySet的基础上继续执行子语句 # extra(self, select=None, where=None, params=None,
Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。...filter() 等方法中的关键字参数查询都是一起进行“AND” 的。 ...如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象。...[('番茄物语',)]> 查询函数可以混合使用Q 对象和关键字参数。...所有提供给查询函数的参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。 例如:查询出版年份是2017或2018,书名中带物语的所有书。
执行查询 一旦你建立好数据模型之后,django会自动生成一套数据库抽象的API,可以让你执行增删改查的操作。这篇文档阐述了如何使用这些API。关于所有模型检索选项的详细内容,请见数据模型参考。...其他查询集方法 大多数情况使用 all(), filter() 和 exclude() 就足够了。...,我们构造的过滤器都只是将字段值与某个常量做比较。...Q 对象也可以用 ~ 操作取反,而且普通查询和取反查询(NOT)可以连接在一起使用: Q(question__startswith='Who') | ~Q(pub_date__year=2005) 每种查询函式...但仅由一个 model 类并不能知道其他 model 类是如何与它关联的,除非是其他 model 也被载入,那么这是如何办到的? 答案就在于 INSTALLED_APPS 设置中。
题图:by thefolkpr0ject from Instagram 上篇文章讲解了 Django 如何创建模型,本文将继续讲解如何对模型进行增删改查操作。...因为从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。 为了方便理解,我继续使用上篇文章的例子。另外方便我们在打印对象信息时,能得到对象的信息。所以我们需要对之前的代码做下修改。...所以我们在Python 中处理 Unicode 对象的时候,你可以直接将它们混合使用和互相匹配而不必去考虑编码细节。 2 创建对象 为了更加直观的操作数据库,我使用 Django 的 API 来讲解。...6 QuerySet 用法 前面讲到,使用 all(),filter() 查询多条数据,返回的结果是一个 QuerySet 对象。它不是个列表,但是可以使用 list() 将其转变为列表。...可惜的是 QuerySet 是不支持负查询。 但是也有替代方法 # 使用 reverse() 将 QuerySet 的顺序倒置下 # 再使用正查询, 下面的例子表示查询最后两条数据。
step“参数,Django 将执行数据库查询并返回一个列表。...[{'blog_id': 1}, ...]> 当values()与distinct()一起使用时,注意排序可能影响最终的结果。...使用这种方法作为最后的手段,这是一个旧的API,在将来的某个时候可能被弃用。仅当无法使用其他查询方法表达查询时才使用它。 例如: >>> qs.extra( ......一般情况下如果其他事务锁定了相关行,那么本查询将被阻塞,直到锁被释放。使用select_for_update(nowait=True)将使查询不阻塞。...的ForeignKey使用SQL约束ON DELETE CASCADE,任何具有指向要删除的对象的外键的对象将与它们一起被删除。
聚合 Django数据库抽象API描述了使用Django查询来添加、删除、查询和修改单个对象的方法。然而,有时需要根据一组对象聚合您想要获得的值。...本主题指南介绍如何使用Django查询生成和返回聚合值。...annotate()子句的输出是QuerySet;此QuerySet由其他QuerySet操作修改,包括filter()',order_by(),您甚至可以进行其他调用来注释()。...但是,有时要聚合的值属于所查询模型的关联模型。 在聚合函数中指定聚合字段时,Django允许您在筛选相关字段时使用相同的双下划线符号。Django将处理需要检索和聚合相关值的任何表连接。...很难直观地理解ORM如何将复杂的查询集转换为SQL查询。因此,如果有疑问,请使用str(queryset.query)`检查SQL并编写大量测试。
Postgresql了,Django官方也建议配合Postgresql一起使用。..."], "content": "..." } 我要查询作者是phit0n的所有文章,就可以使用Django的queryset: Collection.objects.filter(detail__author...).all() JSONField的强大让我们能灵活地在关系型数据库与非关系型数据库间轻松地切换,因此在我们的很多业务中都会使用到这个功能。...他们的区别是:transform表示“如何去找关联的字段”,lookup表示“这个字段如何与后面的值进行比对”。...但是熟悉Django的同学也应该知道,Django的queryset使用方法是编写如下查询语句: .filter(detail__author='phith0n') 这个detail__author用户是无法控制的
(title__icontains='django').count() # 默认的查询方法依然可用 2 这样我们可以将经常使用的查询进行封装,就不必重复写代码了....由于get_queryset()返回一个Queryset对象,所以你可以使用filter(),exclude()和其他所有的Queryset方法....如果你使用自定义的Manager对象,请注意,Django遇到的第一个Manager(以它在模型中被定义的位置为准)会有一个特殊状态。...)来改变行为.重写内置方法的经典用例就是你想要在保存一个对象是做些其他的什么.例如: from django.db import models class Blog(models.Model):...Model.clean() 应用这个方法来提供自定义的模型验证,以及修改模型的属性.例如,你可以使用它来给一个字段自动提供值,或者用于多个字段需要一起验证的情形: import detetime from
通过这一章的学习,你将对Django Admin有基本的了解,并能够开始使用它来管理你的数据模型。后续章节将深入探讨如何定制和扩展Admin以满足项目需求。...后续章节将进一步探讨如何结合Django的其他功能来构建复杂的应用程序。...第4章:数据管理与优化 4.1 数据导入导出 数据导入:Django提供了多种方式将数据导入数据库,包括使用loaddata命令加载JSON或XML格式的数据,以及编写自定义脚本来导入CSV或其他格式的数据...4.2 使用QuerySet进行数据查询 QuerySet API:Django的QuerySet API提供了丰富的查询方法,如过滤、排序、聚合等。...在这一章中,你将学习如何有效地管理Django项目中的数据,包括导入导出数据、优化数据查询性能以及利用第三方库进行数据分析。这些技能对于构建高性能和数据驱动的应用程序至关重要。
网站:http://python.usyiyi.cn/django/index.html 聚合 Django数据库抽象API描述了使用Django查询来增删查改单个对象的方法。...例如,我们可以查询每个作者,注上它写的所有书(以及合著的书)一共有多少页(注意我们如何使用 ‘book’来指定Author -> Book的多对多的反转关系): >>> Author.objects.annotate...聚合和其他查询集子句 filter() 和 exclude() 聚合也可以在过滤器中使用。 作用于普通模型字段的任何 filter()(或 exclude()) 都会对聚合涉及的对象进行限制。...像使用其他模型字段一样,注解也可以在filter()和exclude() 子句中使用别名。...注意 你可能想知道为什么 Django 不删除与你无关的列。主要原因就是要保证使用 distinct()和其他方法的一致性。
查出指定的对象 Retrieving a single object with get() 使用 get() 只取一个数据对象 Other QuerySet methods 其他的 QuerySet...特别点 本文将翻译 django 官网的 模型层的 QuerySet 章节 文档版本:1.11 Making queries 进行查询 一旦你创建了 数据表模型类,django 会自动给你一些数据库抽象...API,让你可以创建、查询、更新、删除对象,下文将介绍如何使用这些API(以一个网页应用为例展开) 首先是创建表模型类 先分析一下他们的表关系,会有助于理解下面的内容 from django.db...(ORM)中,数据库与 python 对象的映射关系十分形象,一个表模型类(class)即代表一张表,实例化出一个对象即代表一条数据记录 创建一个对象(一条数据记录) 在 django 中要想创建一个数据对象...Other QuerySet methods 其他的 QuerySet 方法 通常情况下,你会使用 .all()、.get()、.exclude() 去查询数据库,但我们提供的远不止这些。
减少重复代码 - 提供了常见操作的标准实现,如获取查询集、序列化数据等提高开发效率 - 内置了分页、过滤、排序等功能代码组织更清晰 - 将通用逻辑与业务逻辑分离易于扩展 - 可以通过重写方法来自定义行为与...DRF 生态系统集成 - 与 DRF 的其他组件(如序列化器、权限等)无缝协作三....查询集(queryset)与 get_queryset()queryset 属性:定义视图将操作的数据集class BookView(GenericAPIView): queryset = Book.objects.all...True) )何时使用:使用 queryset 属性:当查询集是固定的,不需要根据请求动态变化使用 get_queryset() 方法:当需要根据请求用户、查询参数等动态调整查询集2....过滤(filter_backends)控制如何过滤查询集。
如果要添加行级功能--就是说该功能只对某个模型的实例对象起作用。在这种情况下,使用 模型方法 比使用自定义的管理器方法要更好。) 自定义的管理器 方法可以返回你想要的任何数据,而不只是查询集。...由于 get_queryset() 返回的是一个 查询集 对象,所以你仍可以对它使用 filter(), exclude()和其他 查询集的方法。...使用管理器访问关联对象 默认情况下,在访问相关对象时(例如choice.poll),Django 并不使用相关对象的默认管理器,而是使用一个”朴素”管理器类的实例来访问。...与数据库进行交互。...如果你重写了 get_queryset() 方法并且过滤掉了一些行数据,Django 将返回不正确的结果。不要这么做!
对象转换为字符串或其他形式以供人类或其他系统使用 日志配置说明1 在settings.py中配置: LOGGING = { 'version': 1, 'disable_existing_loggers...5xx响应被视为错误消息;4xx响应被记录为警告消息;其他一切都被记录为INFO django.template - 与模板渲染相关的日志消息 django.db.backends - 有与数据库交互产生的日志消息...在使用Django的ORM框架时可以基于如下方法: 对于多对一关联(如投票应用中的老师和学科),我们可以使用QuerySet的用select_related()方法来加载关联对象; 而对于多对多关联...可以用QuerySet的only()方法来指定需要查询的属性,也可以用QuerySet的defer()方法来指定暂时不需要查询的属性,这样生成的SQL会通过投影操作来指定需要查询的列,从而改善查询性能,...('good_count'), bad=Avg('bad_count')) 可见,Django的ORM框架允许我们用面向对象的方式完成关系数据库中的分组和聚合查询。
与惰性机制 所谓惰性机制:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行...使用exists()和iterator()方法可以优化程序对内存的使用。不过,由于它们并不会生成queryset cache,可能 会造成额外的数据库查询。....city) #如何拿到与它绑定的Book对象呢?...此时Django为我们提供了F和Q查询: # F 使用查询条件的值,专门取对象中某列值的操作 # from django.db.models import F # models.Tb1...pub_date = '2005-05-06') # import datetime # e=datetime.date(2005,5,6) #2005-05-06 # 5、Q对象可以与关键字参数查询一起使用
领取专属 10元无门槛券
手把手带您无忧上云