如果你想只用一条语句创建并保存一个对象,使用create()方法。 保存对象的改动 调用save()方法,来保存已经存在于数据库中的对象的改动。...获取对象 通过模型中的Manager构造一个QuertSet,来从你的数据库中获取对象。 QuerySet表示你数据库中取出来的一个对象的集合。...想了解对查询集何时求值,请查看 何时对查询集求值 (When QuerySets are evaluated)....Django 也提供反向获取关联对象的 API,就是由从被关联的对象得到其定义关系的主对象。...NULL ...;" 在一对多关系中,第一次正向获取关联对象时,关联对象会被缓存。
exclude() 排除满足条件的对象 annotate() 使用聚合函数 order_by() 对查询集进行排序 reverse() 反向排序 distinct() 对查询集去重...ordering属性对QuerySet中的对象进行排序 Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline...换句话说,用order_by()方法对QuerySet对象进行操作会返回一个扩大版的新QuerySet对象。因此,使用多值字段对结果进行排序时要格外小心。 没有方法指定排序是否考虑大小写。...对于大小写的敏感性,Django将根据数据库中的排序方式排序结果。...在旧版本中,id_list是必需的参数,现在是一个可选参数。 8. iterator() 提交数据库操作,获取QuerySet,并返回一个迭代器。
Django小技巧17: QuerySets的latest和earliest方法 Posted November 05, 2018 ?...翻译整理自: simpleisbetterthancomplex.com 就像QuerySets的first和last方法一样, Django 还提供了earliest和latest方法....用于获取最早和最新的数据,增强代码的可读性....最好在模型的Meta类中先定义get_latest_by属性 Python class Post(models.Model): headline = models.CharField(max_length...另外一个需要注意的点是, 和日期作为排序参数的时候, 可能会遇到日期为空的情况, 这时候工作的结果和我们想象的不一致。
魔鬼的陷阱 QuerySet 的类型 有时候希望它简单一点 有时候希望它坚持自我 多对多和 values() ORM 终究只是 ORM 隐式转换 Mysql 低版本时间精度问题 虚假的 .query...多对多和 values() 存在一个模型 class Foo(models.Model): name = models.CharField(**some_params) bars = models.ManyToManyField...f = Foo.objects.create() # 我们预期是获取按照时间来排序,f 的前一条记录 o = Foo.objects.filter(created_lt=f.created).latest...https://docs.djangoproject.com/en/1.11/ref/models/querysets/#extra extra() 可以利用 sql 在数据库中做数据处理,而不用放到内存中...如果手动处理,需要将整个表的字段放到内存,并做唯一校验,非常麻烦且耗时。
本篇主要介绍我们在使用django框架开发的时候使用的操作数据库的语句,这在动态网站部分是很重要的,因为我们需要连接数据库进行操作,然后把数据处理的结果显示在前端页面上,在其他地方我们都是直接用sql语句来手动输入...,这样容易造成错误,还影响效率,在django中,内置了很多处理数据库操作的函数,能更便利的帮我们操作数据库 开始 实例代码 models.py class Blog(models.Model):...5个到第10个之间的数据 Entry.objects.all()[5:10] 查询从第0个开始到第10个,步长为2的数据 Entry.objects.all()[:10:2] 取按headline字段排序后的第一个对象...belongs to this Blog b = Blog.objects.get(pk=1) Entry.objects.all().update(blog=b) 但是如果用save()方法,必须一个一个进行保存...b.entry_set is a Manager that returns QuerySets.
annotate 用法说明文档 http://doc.codingdict.com/django/ref/models/querysets.html#yiyi-860(基础) http://doc.codingdict.com...查询表达式可以是一个简单的值、模型(或关联模型)字段的一个引用或对查询集中的对象一个聚合函数(平均值、和等)。...annotate() 的每个参数都是一个 annotation,它将添加到返回的 QuerySet 中每个对象。...verbose_name="置顶文章") class Meta: verbose_name = "文章" verbose_name_plural = "文章列表" # 获取后台文本编辑器图文内容中图片...Article数据表中的content字段内容 html = pq(temp[0]['content']) # pq方法获取编辑器html内容 # print(html
目录 Making queries 进行查询 创建一个对象(一条数据记录) 保存修改的表对象 保存外键字段或多对多字段(ForeignKey or ManyToManyField fields) Retrieving...官网的 模型层的 QuerySet 章节 文档版本:1.11 Making queries 进行查询 一旦你创建了 数据表模型类,django 会自动给你一些数据库抽象API,让你可以创建、查询...(ORM)中,数据库与 python 对象的映射关系十分形象,一个表模型类(class)即代表一张表,实例化出一个对象即代表一条数据记录 创建一个对象(一条数据记录) 在 django 中要想创建一个数据对象...),返回 True,如果没有结果,返回 False Caching and QuerySets 缓存 和 QuerySets 每一个 QuerySet 都包含一个缓存,来最小化数据库访问次数,知道它的工作原理可以让你写出更高效的代码...缓存中,并返回查询出来的结果集。
=True, verbose_name=u'标题') 理解QuerySets 理解QuerySet的求值过程 QuerySets是惰性的 news_list = News.object.all() #..., 和select_related()类似,针对many-to-many 不要获取你不需要的数据 使用 QuerySet.values() 和 values_list() 当只需要一个字段的值,返回list...,不要使用 if querysets 。...不要过度使用 count() 和 exists() 比如,假设有一个Email的model,有一个 body 的属性和一个多对多关系的User 属性,下面的模板代码是最优的: {% if display_inbox...使用 with 意味着我们会存储 user.emails.all 在一个变量中供后面使用,这允许被缓存以便重用。 {% if emails %} 其实是调用 QuerySet.
理解查询集 理解查询集(QuerySets) 是通过简单的代码获取较好性能至关重要的一步。特别是: 理解查询集计算 要避免性能问题,理解以下几点非常重要: QuerySets是延迟的。...在数据库中而不是Python中做数据库的工作 比如: 在最基础的层面上,使用过滤器和反向过滤器对数据库进行过滤。 使用F 表达式在相同模型中基于其他字段进行过滤。 使用数据库中的注解和聚合。...一次性检索你需要的任何东西 在不同的位置多次访问数据库,一次获取一个数据集,通常来说不如在一次查询中获取它们更高效。如果你在一个循环中执行查询,这尤其重要。...所以: 使用QuerySet.select_related()和prefetch_related() 充分了解并使用select_related()和prefetch_related(): 在视图的代码中...另外,当建立起一个带有延迟字段的模型时,要意识到一些(小的、额外的)消耗会在Django内部产生。
order_by():对结果进行排序。 返回单个值的过滤器如下: get():返回单个满足条件的对象 如果未找到会引发"模型类.DoesNotExist"异常。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。...,所以mysql执行日志有两次,如下: 限制查询集 可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。...” 对查询集进行切片后返回一个新的查询集,不会立即执行查询。...如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常,[0:1].get()如果没有数据引发DoesNotExist异常。
order_by(*field): 对查询结果排序 reverse(): 对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的...聚合查询和分组查询 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。 键的名称是聚合值的标识符,值是计算出来的聚合值。... QuerySet进行排序 >>> models.Book.objects.annotate(author_num=Count("author")).order_by("author_num") Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...models.Book.objects.all().update(title=Concat(F("title"), Value("("), Value("第一版"), Value(")"))) Q查询 filter() 等方法中的关键字参数查询都是一起进行
order_by():对结果进行排序。 返回单个值的过滤器如下: get():返回单个满足条件的对象 如果未找到会引发"模型类.DoesNotExist"异常。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。...,所以mysql执行日志有两次,如下: 限制查询集 可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。...对查询集进行切片后返回一个新的查询集,不会立即执行查询。...如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常,[0:1].get()如果没有数据引发DoesNotExist异常。
晚上回来查了下latest的用法,发现白天在公司对这个功能的理解有误。以为这个只是跟时间有关,其实任何可以排序的东西都能用latest。...latest来了 名如其意,就是取最近的/最新的一个对象,注意是一个对象,而不是一个只包含一个元素的list。怎么用呢?...对于Django的QuerySet对象来说,直接print其query属性即可得到这条语句执行的sql是什么。那么对于 latest 这不返回QuerySet对象的方法呢?...而latest Django1.2以上就有了,在Django1.6开始还有一个earliest可供使用。.../en/1.5/ref/models/querysets/#latest
,即一个entry对应多个blog,entry与author是多对多的关系, 通过modles.ManyToManyField()实现。...>>> Entry.objects.order_by(‘headline’)[0] 这是取按headline字段排序后的第一个对象。 ...Blog.objects.filter(entry__author__name=’Lennon’) 查找blog表中外键关系entry表中的author字段中包含Lennon的blog数据。...Change every Entry so that it belongs to this Blog. >>> Entry.objects.all().update(blog=b) 如果用save()方法,必须一个一个进行保存...() # Returns all Entry objects related to Blog.# b.entry_set is a Manager that returns QuerySets.>>>
优化视图-请求 from rest_framework.views import APIView 当视图继承 APIView之后,请求实例方法中的第二个参数 request为 Request对象,是对Django...中的 HttpRequest对象进行的拓展 ?...Request 对Django中的HttpRequest进行拓展 根据请求头中的Content-Type自动进行解析 无论前端发送那种格式数据,都可以以相同的方式读取 request.data 类似于Django...中的request.POST和request.FILES 可以对POST,PUT,PATCH的请求体进行解析 支持form表单传参,支持json格式传参 request.query_params 类似Django...中的request.GET 获取查询字符串参数 支持Django.request中所有的对象和方法 优化视图-渲染 from rest_framework.response import Response
方法:order_by 用法:MyModel.objects.order_by (’- 列’,‘列’) 作用: 与 all () 方法不同,它会用 SQL 语句的 ORDER BY 子句对查询结果进行根据某个字段选择性的进行排序...年龄大于65的全部信息 auths = Author.objects.filter(age__gt=65) auths.delete() 聚合查询 聚合查询是指对一个数据表中的一个字段的数据进行部分或全部进行统计查询...return HttpResponse('请查看服务器端控制台获取结果') F对象 一个F对象代表数据库中某条记录的字段的信息 作用: 通常是对数据库中的字段值在不获取的情况下进行操作 用于类属性...null=True models.SET_DEFAULT 将ForeignKey设置为其默认值;必须设置ForeignKey的默认值。...(name='清华大学出版社') books = pub1.book_set.all() # 通过book_set 获取pub1对应的多个Book数据对象 #books = Book.objects.filter
之前同事在项目中写了分页的一个函数,但是并没有返回结果集的总个数和总页数。所以我就想到了用 django 自带的分页类获取分页的数据。因为要分页的对象可能是个列表而不是 django 模型的查询集。...from django.core.paginator import Paginator page_rows= "每页展示多少条数据" # 注queryset是一个模型的查询集 p= Paginator(...stacklevel=3 ) 我自定义我的分页函数只是用了 count 和 num_pages 方法,因为我初始化 Paginator 时传入的 queryset 没有进行排序...在这种情况下幂等是交由 order_by 的数据来保证的,在常见数据库中,保持一个序列顺序固定,是需要显示的 order by 来做,虽然我们查询的时候,默认会根据自增 ID 来做一次 order...by,但是这是一个不可靠行为,或者说是叫做 undefined behavior ,Django 为了保证在不同数据库,不同版本的数据库中数据一致,加上了这样一个强制。
的社群,有想学习django的同学可以在公众号后台回复“django”,获取入群方式。...django的 Admin 中添加数据时是否可允许空值 primary_key=(True/False) 主键,对 AutoField 设置主键后,就会代替原来的自增 id 列 auto_now...0001_initial.py(0001会根据迁移的次数进行递增),用于记录对模型的修改 python manage.py migrate 运行后将 model 中的操作转换成为数据库语言,作用于数据库...对存在数据库中的数据进行删除,可以通过如下操作进行 # 删除某条特定的数据 c = Category.objects.get(name='new test category') c.delete()...("SELECT c.id, c.name FROM blog_category as c") # 获取查询到的第一个数据 row = cursor.fetchone() # 获取全部查询到的数据 rows
=3 F查询 Django 使用 F() 对象来生成一个 SQL 表达式,直接在数据库层面进行操作。...通过 Django 的 F() 类,Python 所做的就是创建 SQL 语法来引用这个字段并描述操作。...F() 除了用于上述对单个实例的操作外,F() 还可以与 update() 一起用于对象实例的 QuerySets。...如果两个 Python 线程执行上面第一个例子中的代码,一个线程可以在另一个线程从数据库中获取一个字段的值后,检索、递增并保存它。第二个线程保存的值将基于原始值,第一个线程的工作将丢失。...这种持久性可以通过在保存模型对象后重新加载来避免,例如,可以重新进行查询,获取该对象。
在Flask中处理请求时,就会产生一个 “请求上下文” 对象,整个请求的处理过程,都会在这个上下文对象中进行。 这保证了请求的处理过程不被干扰。...django在中间件中预设了6个方法,这6个方法区别在于不同的阶段执行,对输入或输出进行干预,方法如下: #1 初始化: 无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件...得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web服务来说,Tornado 是一个理想的 Web 框架。...在这个过程中,一定会有数据和状态的转化,这种转化叫做状态转换。其中,GET 表示获取资源,POST 表示新建资源,PUT 表示更新资源,DELETE 表示删除资源。...RESTful 架构 每个URL 代表一种资源; 客户端和服务器之间,传递这种资源的某种表现层; 客户端通过四个http 动词,对服务器资源进行操作,实现表现层状态转换。