一、QuerySet 查询集,类似一个列表,包含了满足查询条件的所有项。QuerySet 可以被构造,过滤,切片,做为参数传递,这些行为都不会对数据库进行操作。只有你查询的时候才真正的操作数据库。...意味着QuerySet是惰性执行的----即创建查询集不会带来任何的数据库访问,直到查询集需要求值的时候,Django才会真正运行这个查询。... exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet... distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。... count(): 返回数据库中匹配查询(QuerySet)的对象数量。
Django的Manager和QuerySet 要从数据库检索对象,需要通过模型类的 Manager 构建一个 QuerySet。...在Django中,模型的Manager提供了接口,它赋予了 Django 模型操作数据库的能力。默认情况下,Django 为每个模型类添加了一个名为 objects 的 Manager。...有关如何自定义Manager,在Django管理器中有详细说明。 QuerySet 一个 QuerySet 代表来自数据库中对象的一个集合。它可以有 0 个,1 个或者多个 filters。...在Django的文档中,明确的告诉了开发者,什么时候QuerySet被执行。因为这影响到SQL执行效率。...请直接参考Django字段查询 参考资料: 执行查询 QuerySet API参考 管理器
一般情况下,我们在写Django项目需要操作QuerySet时一些常用的方法已经满足我们日常大多数需求,比如get、filter、exclude、delete神马的感觉就已经无所不能了,但随着项目但业务逻辑越来越复杂...就是你读出queryset可能会需要一些额外数据要添加进去的时候,你就可以用这个东东咯,使用方法看代码: >>> q = Blog.objects.annotate(Count('entry')) #...,annotate返回的是一个包含注解值的queryset,而aggregate则单独返回注解值,返回类型是一个dict,当然,这种方式在文档中叫做聚合查询,具体使用如下: >>> q = Blog.objects.aggregate...8、first() 和 last() 分别返回queryset的第一项与最后一项,具体用法如下: p = Blog.objects.order_by('title').first() 等同于: try:...答案在这里: django.models 的 on_delete参数,此参数有以下几个可选值: CASCADE:这就是delete()的默认选项,也就是关联删除 PROTECT:如果删除的model obj
>>> from django.contrib.auth.models import User >>> User.objects.none() QuerySet []> 以上就是本文的全部内容,如果觉得还不错的话
其实就是查询的意思。 所以,queryset 是什么?是查询结果的集合的意思。 我就不用那些标准的百度百科的回答了,咱直接上代码,从数据直接拿出来的数据来当例子,你就明白了。...我们用数据工厂平台的代码做演示,目前的models.py中的超链接表,存放数据为这样的,有俩个字段: 如图,俩个字段分别是link_name和link_url。...好然后我们用一段函数来把数据从中取出来并打印: 结果如下: 可以看到,直接从数据库用.all 或者.filter方法拿出来的 结果是queryset,也就是查询集合。...所以queryset的另一个特性就是可以像列表一样遍历和用下标定位具体内部元素: 遍历的具体子元素,都是一个个货真价实的数据记录哈。 别看我直接输出,就显示一个link_name的值。...此时我们得到的仍然是queryset,但结果中,却显示了所有字段。 这样我们用起来就更方便。为什么这么说呢? 因为我们可以把它外面再加上list() 变成我们python常用的格式了。
本文我将重点介绍如何有效使用 Django ORM系统访问中到大型的数据集。...Django的queryset是惰性的 Django的queryset对应于数据库的若干记录(row),通过可选的查询来过滤。...要真正从数据库获得数据,你需要遍历queryset: for person in person_set: print(person.last_name) Django的queryset是具有cache...的 当你遍历queryset时,所有匹配的记录会从数据库获取,然后转换成Django的model。...这些model会保存在queryset内置的cache中,这样如果你再次遍历这个queryset,你不需要重复运行通用的查询。
切片未执行的QuerySet通常会返回另一个未执行的Query Set。但是,如果使用切片语法的step参数,Django将执行数据库查询并返回一个列表。...Django为此提供了count()方法。 Pickle 序列化 QuerySet 如果pickle以序列化QuerySet,这将强制在pickle序列化之前将所有结果加载到内存中。...这意味着当取消缓存QuerySet时,它包含缓存时的结果,而不是数据库中当前的结果。 如果只想提取将来从数据库中重新创建QuerySet所需的信息,请提取QuerySet的查询属性。...表达式可以是简单值、对模型(或任何相关模型)字段的引用,或计算与QuerySet中的对象相关的对象的聚合表达式(平均值、总和等)。...annotation()的每个参数都是一个注释,将添加到返回的QuerySet中的每个对象。 Django提供的聚合函数在以下聚合函数中进行了描述。
Django Form类定义中有一个 ModelChoiceField 对应的是Model 的外键,queryset 是返回一个查询集对象 例如,我有一个Form class BookForm(forms.Form...): books = forms.ModelChoiceField(queryset=Books.objects.all()) 这似乎并没有什么问题。...但是我想要传递books的id,就出现了问题。我们可以如下解决。...在视图中修改queryset对象 form = BookForm() form.fields['books'].queryset = Books.objects.filter(id=1).all() 如果要设置默认值可以通过...{initial={'id':1}的方法进行。
从全局看,虽然C/C++每年在不断的衰退,但是C/C++任然位居前五而且增衰趋势逐渐趋于稳定,那么C/C++凭什么这么牛逼呢??...C 语言主要的用途还是底层编程,例如系统软件:编译器,JVM,驱动,操作系统内核,还有各种嵌入式软件,固件。在这些方面C语言是无法替代的,本身超强的移植性让他更适合做底层的开发。...一、游戏: C++的效率是一个很重要的原因。科学计算:在科学计算领域,FORTRAN是使用最多的语言之一。但是近年来,C++凭借先进的数值计算库、泛型编程等优势在这一领域也应用颇多。...二、网络软件: C++拥有很多成熟的用于网络通信的库,其中最具有代表性的是跨平台的、重量级的ACE库,该库可以说是C++语言最重要的成果之一,在许多重要的企业、部门甚至是军方都有应用。...,许多大型公司的软件的中间框架都是运用C++写的,就算最近比较火的人工智能,其实也是用C++做底层然后用其他语言来实现上面的搭载物。
一、定制日期显示格式 上一篇我们提到日期的显示问题,个人来说,我更喜欢这样的日期显示: 2018-07-21 但是 django的默认日期显示的格式却是这样的: July 30, 2018 简直要急死强迫症...说了这么多,其实我们只要给 Post类添加一个方法就可以了,因为 Django是支持在模板里调用实例的方法的。...这里为了效果明显一些,设置了只显示前 5个字符,实际显示中比这要多,而且也不一定就是显示前多少个字符,也可以是显示第一个自然段。 这些显示的细节就留到以后再进行优化。...聪明的读者肯定想到了,这里可以使用一个方法来生成文章的链接 from django.db import models class Post(models.Model): title = models.CharField...有了视图,我们再在 myblog应用里的 urls文件里添加文章的链接,修改如下: # urls.py from django.urls import re_path from . import views
: '', #你的数据库主机,留空默认为localhost 'PORT': '3306', #你的数据库端口 } } 注意: NAME即数据库的名字,在mysql连接前该数据库必须已经创建...# print(objs[1]) # print(objs[1:4]) # print(objs[::-1]) QuerySet的高效使用: Django的queryset...是惰性的 Django的queryset对应于数据库的若干记录(row),通过可选的查询来过滤。...是具有cache的 当你遍历queryset时,所有匹配的记录会从数据库获取,然后转换成Django的model。...,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合。
翻译整理自: simpleisbetterthancomplex.com 当你想要让两个或者多个 queryset 合并为一个 queryset 的时候, 并且希望使用 list, 而且想要保留对象的...Medium 中发布的故事以及属于特定作者的所有故事。...Python medium = Medium.objects.get(name='Django Blog') user = User.objects.get(username='vitor') django_stories...Python stories = django_stories | vitor_stories # merge querysets 此时你依然可以使用 queryset 的一些操作方法....Python recent_stories = stories.distinct().order_by('-date')[:10] 注意: 合并运算符仅适用于同一类型的 queryset, 并且数据为切片前数据集
在 Django 里写 REST API 是简单的,如何让 API 的速度更快呢?本文分享一种方法:用 Redis 作为缓存,可以让你的 API 的速度提升 10 倍。...这里假定你已经安装了 Redis,并且自己可以按照官方文档写出一个 Django REST API,对 Django 有一定的基础。...细心的你可能看到了装饰器 log_db_queries,它来测试 API 的访问速度,具体代码如下: def log_db_queries ( f ) : from django.db import...来个使用缓存的前后对比: 使用前:1219.266 ms: 使用后:134.002 ms: 最后 缓存确实有助于提高 Django REST API 的速度,而 Redis 又是最佳的缓存工具,可以从这里获取...Django-Redis[1] 的源代码。
返回值: QuerySet 容器对象,内部存放 元组 会将查询出来的数据封装到元组中,再封装到查询集合 QuerySet 中 示例: from bookstore.models import Book...ORDER BY 子句对查询结果进行根据某个字段选择性的进行排序 说明: 默认是按照升序排序,降序排序则需要在列前增加’-' 表示 示例: from bookstore.models import Book...abook.market_price = "10.5" abook.save() 2.通过 QuerySet 批量修改 对应的全部字段 直接调用 QuerySet 的 update (属性 =...,从而得出总计值 (也可以是平均值或总和),即为查询集的每一项生成聚合。...包中,使用前需要先导入 如: from django.db import connection 用创建 cursor 类的构造函数创建 cursor 对象,再使用 cursor 对象,为保证在出现异常时能释放
Django ORM用到三个类:Manager、QuerySet、Model。...QuerySet实例,QuerySet是一个可遍历结构,包含一个或多个元素,每个元素都是一个Model 实例,它里面的方法也是表级方法,前面说了,Django给我们提供了增加表级方法的途径,那就是自定义...manager类,而不是自定义QuerySet类,一般的我们没有自定义QuerySet类的必要;django.db.models模块中的Model类,我们定义表的model时,就是继承它,它的功能很强大...在代码1中,在遍历a前,先执行a对应的SQL,拿到数据后,然后再遍历a,而遍历过程中,每次都还要查询数据库获取关联表。...代码2中,当遍历开始前,先拿到Entry的QuerySet,并且也拿到这个QuerySet的每个object中的blog对象,这样遍历过程中,就不用再查询数据库了,这样就减少了数据库读次数。
Django QuerySet 本文主要内容是关于Django框架中QuerySet知识小结 #1 环境 Python3.7.3 Django==2.0.7 #2 Field查找 字段查找是指定SQL...它们被指定为QuerySet方法的关键字参数filter(), exclude()并且get()。...exclude() exclude(** kwargs) 返回QuerySet包含与给定查找参数不匹配的新对象。...annotate() annotate(* args,** kwargs) 表达式可以是简单值,对模型(或任何相关模型)上的字段的引用,或者是通过与对象中的对象相关的对象计算的聚合表达式(平均值,总和等...)QuerySet。
魔鬼的陷阱 QuerySet 的类型 有时候希望它简单一点 objects.values() 返回的并不是简单类型的数据,而是 QuerySet。...一般直接用来做 Response 没有问题,但是要知道 QuerySet 是不能被 pickle 的,如果使用到 Django Cache 之类功能,直接用 values() 当作返回会死得很惨。...,只能注意 + 规避,详见: QuerySet API reference | Django documentation | Django Django provides a range of refinement...f = Foo.objects.create() # 我们预期是获取按照时间来排序,f 的前一条记录 o = Foo.objects.filter(created_lt=f.created).latest...天使的眼泪 巧用 extra QuerySet API reference | Django documentation | Django Django provides a range of refinement
表达式可以是简单的值、对模型(或任何关联模型)上的字段的引用或者聚合表达式(平均值、总和等)。...对于大小写的敏感性,Django将根据数据库中的排序方式排序结果。...如要获取QuerySet中最后五个元素,可以这样做: my_queryset.reverse()[:5] 这与Python直接使用负索引有点不一样。 Django不支持负索引,只能曲线救国。...在Django1.11在defaults中增加了对可调用值的支持。...13. aggregate() aggregate(args, *kwargs) 返回汇总值的字典(平均值,总和等),通过QuerySet进行计算。
,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith. 3) 空查询 isnull:是否为null。...[, , ]> Q对象前可以使用~操作符,表示非not。...PeopleInfo: 王语嫣>, <PeopleInfo 6.查询集QuerySet 1 概念 Django的ORM中存在查询集的概念。...查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。...使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。
继上篇 django2实战2.创建博客应用 django对数据的操作采用的是ORM模式,即将数据库的增删改查抽象成对象方法的调用,开发人员只需要调用相关的方法,而不需要写sql语句。...In [1]: 添加数据 In [1]: from django.contrib.auth.models import User In [2]: from blog.models import Post...新文章 修改数据 若post已经指定了一个数据,再调用save,即相当于修改原记录 In [7]: post Out[7]: In [8]: post.body = '床前明月光...将进酒 望庐山瀑布 日照香炉生紫烟,遥看瀑布挂前川。 飞流直下三千尺,疑是银河落九天。 ?...如果你感兴趣,请关注我的django2实战文集 如果觉得本文对你有所帮助,点个赞,或者赏杯咖啡钱,你的认可对我很重要