那么一般情况下, 你用以下方法获取了两个 queryset。...Python medium = Medium.objects.get(name='Django Blog') user = User.objects.get(username='vitor') django_stories...= medium.stories.all() vitor_stories = user.stories.filter(category__name='django') 此时我们有两个查询集(QuerySets...) ,我们可以通过| 运算符来合并这两个查询集。...Python stories = django_stories | vitor_stories # merge querysets 此时你依然可以使用 queryset 的一些操作方法.
过滤后的结果集是独立的 每次你筛选一个结果集,得到的都是全新的另一个结果集,它和之前的结果集之间没有任何绑定关系。每次筛选都会创建一个独立的结果集,可以被存储及反复使用。...查询集是延迟的 QuerySets 是惰性的 – 创建 QuerySet 的动作不涉及任何数据库操作。...对 QuerySet 求值就意味着 Django 会访问数据库。想了解对查询集何时求值,请查看 何时对查询集求值 (When QuerySets are evaluated)....如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...用 Q 对象实现复杂查找 (Complex lookups with Q objects) 在 filter() 等函式中关键字参数彼此之间都是 “AND” 关系。
(字段查询条件,双下划线查询) 常见形式 注意点 书写格式 lookuptype 查找类型分类整理 单词 特别点 本文将翻译 django 官网的 模型层的 QuerySet 章节 文档版本:1.11...缓存中,并返回查询出来的结果集。...,具体来说,这意味着使用数组切片或者索引限制查询结果集将不会保存缓存。...,多个查询(关键字)参数以逗号间隔,参数之间是 AND 关系,其最外层逻辑是 NOT()。...(字段查询条件,双下划线查询) 此部分参考文档: django官网 字段查找(field-lookups) 字段查找(field-lookups)对应的是 SQL 语句中的 WHERE 条件,一般放在
可以使用下列方法对QuerySet提交查询操作: 迭代:QuerySet是可迭代的,在首次迭代查询集时执行实际的数据库查询。...查找的参数(**kwargs)应该满足下文字段查找中的格式。多个参数之间是和AND的关系。...tzinfo参数定义在截取之前将数据时间转换到的时区。 11. none() 调用none()将创建一个不返回任何对象的查询集,并且在访问结果时不会执行任何查询。...()被调用,不会再去数据库查找,而是在一个预取的QuerySet缓存中查找。...每个调用都向延迟集添加新字段: # 延迟body和headline两个字段。
弄清楚你在执行什么查询以及你的开销花在哪里。你也可能想使用外部的项目,像django-debug-toolbar,或者直接监控数据库的工具。...理解查询集 理解查询集(QuerySets) 是通过简单的代码获取较好性能至关重要的一步。特别是: 理解查询集计算 要避免性能问题,理解以下几点非常重要: QuerySets是延迟的。...用唯一的被或索引的列来检索独立对象 有两个原因在get()中,用带有unique或者db_index的列检索独立对象。首先,由于查询经过了数据库的索引,所以会更快。...一次性检索你需要的任何东西 在不同的位置多次访问数据库,一次获取一个数据集,通常来说不如在一次查询中获取它们更高效。如果你在一个循环中执行查询,这尤其重要。...如果一个模型具有默认的顺序(Meta.ordering),并且你并不需要它,通过在查询集上无参调用order_by() 来移除它。 向你的数据库添加索引可能有助于提升排序性能。
官方文档说明:https://docs.djangoproject.com/en/2.1/ref/models/querysets/#django.db.models.query.QuerySet.values...结果:values()得到的是一个字典形式的查询集(QuerySet),查询集是一个可迭代对象。 2.values()结果如何序列化为json?...)将QuerySet转为list: city_list = list(cities) (2)将list序列化为json: city_json = json.dumps(city_list) 补充知识:django...models.Charactor.objects.get(cid = cID) obj.cid = '1' obj.save() #查 objLst0 = models.Charactor.objects.filter(cid = cID) 以上这篇Django
翻译整理自: simpleisbetterthancomplex.com 本文介绍一个非常简单的技巧, 能够帮助你在使用 Django ORM 时优化数据库查询....需要注意的是, Django QuerySets 是惰性查询的, 如果使用得当非常适用。...ORM将对unpaid_invoices数据集每一条记录执行一次额外的查询....{{ invoice.vendor.name }} {% endfor %} 如果unpaid_invoices数据集有...推荐一个可以跟踪数据库查询的调试工具Django Debug Toolbar 阅读更多关于Django QuerySet API的文档. Django Documentation
Django小技巧16: 数据库访问优化 Posted November 05, 2018 ?...访问外键值 如果你只需外键的ID Python Do post.author_id Python Don't post.author.id 如果你的博文中有一个 author 的外键,Django 会自动将主键存储在属性...如果你如果使用author来访问 ID, 数据则会多出一个额外的查询,就会产生开销。...如果你只想知道 QuerySets 是否为空....减少不必要的查询次数 就是之前讲过的 select_related Python Do review = Review.objects.select_related('author').first()
方法 create() 创建一个新的对象,保存对象,并将它添加到关联对象集之中,返回新创建的对象。...换句话说,在关联的任何一端,都不需要再调用save()方法。 聚合查询和分组查询 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...')) Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。...终端打印SQL语句 在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_loggers
Django + MySQL 查询不区分大小写问题 Posted May 29, 2018 最近发现一个现象是测试环境的 sqlite 是可以区分大小写的。...Company.objects.filter(name='teambition') []>, ]>] 获得到两个实例...由于测试环境的 sqlite 没有问题, 所以怀疑在 mysql 的配置上面。...原来是字符集校对规则的问题, utf8_general_ci 不区分大小写, 可以改成utf8_bin(将字符串中的每一个字符用二进制数据存储,区分大小写。)...我找到另外的一种解决方式 通过 DJANGO ORM 的extra, 在匹配语句上面加上BINARY来区分大小写.
.htm 先做性能分析 - 两个工具 django.db.connection from django.db import connection # context print connection.queries...`session_key`, `django_session`.`session_data`, `django_session`....`expire_date` FROM `django_session` WHERE (`django_session`....=True, verbose_name=u'标题') 理解QuerySets 理解QuerySet的求值过程 QuerySets是惰性的 news_list = News.object.all() #...__len__(),数据已在缓存 for 循环的email数据已经在缓存中了。
上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象、Q对象、聚合查询等功能。...参考文献 https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/#caching-and-querysets 返回查询集的过滤器如下:...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。...mysql日志如下: 示例二:如下是两个查询集,无法重用缓存,每次查询都会与数据库进行一次交互,增加了数据库的负载。...” 对查询集进行切片后返回一个新的查询集,不会立即执行查询。
上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象、Q对象、聚合查询等功能。...参考文献 https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/#caching-and-querysets 返回查询集的过滤器如下:...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。...mysql日志如下: 示例二: 如下是两个查询集,无法重用缓存,每次查询都会与数据库进行一次交互,增加了数据库的负载。...对查询集进行切片后返回一个新的查询集,不会立即执行查询。
本篇主要介绍我们在使用django框架开发的时候使用的操作数据库的语句,这在动态网站部分是很重要的,因为我们需要连接数据库进行操作,然后把数据处理的结果显示在前端页面上,在其他地方我们都是直接用sql语句来手动输入...,这样容易造成错误,还影响效率,在django中,内置了很多处理数据库操作的函数,能更便利的帮我们操作数据库 开始 实例代码 models.py class Blog(models.Model):...q时才会访问数据库 查找前5个entry表里的数据 Entry.objects.all()[:5] 查找从第5个到第10个之间的数据 Entry.objects.all()[5:10] 查询从第0个开始到第...b.entry_set is a Manager that returns QuerySets....b.entries is a Manager that returns QuerySets.
有时候希望它坚持自我 很多时候我们需要限制 QuerySet 返回的字段以加快 DB 查询的速度(比如一些没索引的长字段),这时候可能的两个方法: only() & values() 。..._iterable_class ,如果后面还有更多的级联查询,会导致最后的结果为 Dict 而不是 QuerySet。...from django.db import connection # 在语句提交之后,立即打印 # 同时需要记得开启 DEBUG = True print(connection.queries) 再或者...https://docs.djangoproject.com/en/1.11/ref/models/querysets/#extra extra() 可以利用 sql 在数据库中做数据处理,而不用放到内存中...,在数据量较大时有比较好的效果,比如: queryset = queryset.extra(select={'username': "CONCAT(username, '@', domain)"}) 在模糊查询时
题目 描述 请编写 SQL 语句,查询 courses 表中,课程名首两个字母在 ‘Db’ 和 ‘Dy’ 之间所有课程的名称 https://www.lintcode.com/problem/1968...任意字符 *匹配零个或多个在它前面的字符 or select name from courses where name between "Db" and "Dz" and name not like..."Dz%" 查询以字母 ‘D’ 到 ‘O’ 开头的课程 select name from courses where name regexp "^[D-O].*" ---- 我的CSDN博客地址 https
之前同事在项目中写了分页的一个函数,但是并没有返回结果集的总个数和总页数。所以我就想到了用 django 自带的分页类获取分页的数据。因为要分页的对象可能是个列表而不是 django 模型的查询集。...from django.core.paginator import Paginator page_rows= "每页展示多少条数据" # 注queryset是一个模型的查询集 p= Paginator(...queryset, page_rows) # 获取查询集的总个数 total_count= p.count # 获取查询集的总页数 total_page= p.num_pages Paginator类源码...在这种情况下幂等是交由 order_by 的数据来保证的,在常见数据库中,保持一个序列顺序固定,是需要显示的 order by 来做,虽然我们查询的时候,默认会根据自增 ID 来做一次 order...by,但是这是一个不可靠行为,或者说是叫做 undefined behavior ,Django 为了保证在不同数据库,不同版本的数据库中数据一致,加上了这样一个强制。
Q查询和F查询 Q查询 在filter() 等方法中,查询使用的关键字参数是通过 “SQL AND” 连接起来的。...当操作符被用于两个 Q 对象之间时会生成一个新的 Q 对象。...=3 F查询 Django 使用 F() 对象来生成一个 SQL 表达式,直接在数据库层面进行操作。...F() 除了用于上述对单个实例的操作外,F() 还可以与 update() 一起用于对象实例的 QuerySets。...如果两个 Python 线程执行上面第一个例子中的代码,一个线程可以在另一个线程从数据库中获取一个字段的值后,检索、递增并保存它。第二个线程保存的值将基于原始值,第一个线程的工作将丢失。
__range: 查找数据是否在指定的区间范围内 # 查找年龄在某一区间内的所有作者 Author.objects.filter(age__range=(35,50)) # 等同于 SELECT ......= Author.objects.get(id=1) auth.delete() except: print(删除失败) 删除查询结果集 步骤 查找查询结果集中满足条件的全部 QuerySet...,从而得出总计值 (也可以是平均值或总和),即为查询集的每一项生成聚合。...(字段) 之间的比较。...,如: 每个人都有不同的学校(小学,初中,高中,…),每个学校都有不同的学生… 1.语法 在关联的两个类中的任意一个类中,增加: 属性 = models.ManyToManyField(MyModel)
2、检索特定的对象 使用以下两个方法: fileter(**kwargs) 返回一个与参数匹配的QuerySet,相当于等于(=). ...其他的QuerySet方法 >>> Entry.objects.all()[:5] 这是查找前5个entry表里的数据 >>> Entry.objects.all()[5:10] 这是查找从第5个到第10...个之间的数据。...2008) Blog.objects.filter(entry__headline__contains=’Lennon’).filter( entry__pub_date__year=2008) 这两种查询在某些情况下是相同的...: def my_custom_sql(self): from django.db import connection cursor = connection.cursor() cursor.execute
领取专属 10元无门槛券
手把手带您无忧上云