Django查询集QuerySet及两大特性

1 概念

Django的ORM中存在查询集的概念。

查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。

当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表):

    • all():返回所有数据。
    • filter():返回满足条件的数据。
    • exclude():返回满足条件之外的数据。
    • order_by():对结果进行排序。

也就意味着查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果。

从SQL的角度讲,查询集与select语句等价,过滤器像where、limit、order by子句。

判断某一个查询集中是否有数据:

    • exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。

两大特性

一、惰性执行

创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用

例如,当执行如下语句时,并未进行数据库查询,只是创建了一个查询集Tooks

tooks= Tooks.objects.all()

继续执行遍历迭代操作后,才真正的进行了数据库的查询

for took in tooks:
    print(took.name)

二、缓存

使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。

情况一:如下是两个查询集,无法重用缓存,每次查询都会与数据库进行一次交互,增加了数据库的负载。

from book.models import BookInfo

 [book.id for book in BookInfo.objects.all()]

 [book.id for book in BookInfo.objects.all()]

情况二:经过存储后,可以重用查询集,第二次使用缓存中的数据。

books=BookInfo.objects.all()

[book.id for book in books]

[book.id for book in books]

原文地址:https://www.cnblogs.com/zhougreat/p/12677678.html

时间: 2024-10-10 23:24:16

Django查询集QuerySet及两大特性的相关文章

django查询集-17

当查询结果是多个的时候,django-ORM会返回一个 查询集(QuerySet) ,表示从数据库中获取对象的 集合 . 查询集可以使用过滤器进行再次处理. 例如查询阅读量大于20且评论数大于30的书 >>> book = Book.objects.filter(b_read__gt=20) >>> book.filter(b_comment__gt=30) <QuerySet [<Book: 天龙八部>]> 因为查询集类似一个集合,所以可以对查

查询集 QuerySet

1 概念 Django的ORM中存在查询集的概念. 查询集,也称查询结果集.QuerySet,表示从数据库中获取的对象集合. 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据. filter():返回满足条件的数据. exclude():返回满足条件之外的数据. order_by():对结果进行排序. 对查询集可以再次调用过滤器进行过滤,如 BookInfo.objects.filter(bread__gt=30).order_by('bpub_d

django查询集API

本节将详细介绍查询集的API,它建立在下面的模型基础上,与上一节的模型相同: from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __str__(self): # __unicode__ on Python 2 return self.name class Author(models.Model

django查询集

查询集 all, filter, exclude, order_by调用这些函数会产生一个查询集,QuerySet类对象可以继续调用上面的所有函数. 查询集特性 1) 惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询. 2) 缓存:当使用的是同一个查询集时,第一次使用的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个查询集时,使用的是缓存中的结果. 限制查询集 可以对一个查询集进行取下标或者切片操作来限制查询集的结果. 对一个查询集进行切片操作会产生一个新的查

Redis 怎么实现保存Django 查询集

我们在用Python Django开发秒杀系统的时候,要将Django 查询到商品详细信息保存到Redis缓存中去,但Redis不能直接保存对象,但有什么方法呢? 我们发现可用Python的pickle模块. pickle模块可以序列化对象并保存到磁盘中,并在需要的时候读取出来,任何对象都可以执行序列化操作. Pickle模块中最常用的函数为: 1.pickle.dumps(obj[, protocol]) 函数的功能:将obj对象序列化为string形式,而不是存入文件中. 参数讲解: obj

C#面向对象课程两大特性——封装、继承 12月23日

一.封装 封装:就是将成员变量设为private私有的,然后将其封装出一个属性 属性是具有get和set两个函数的读取写入器,能够成为赋值取值做数据传递. 封装的方法:在字段名上点击右键,重构—封装字段,即可将字段封装. 二.继承      继承是面向对象编程中一个非常重要的特性,它也是另一个重要特性—多态的基础. 类与类之间可以具有继承关系,一个类只能继承一个父类(单根性),但可以被好多类继承. 父类与子类之间拥有以下两个基本特性: (1)是一种(IS-A)关系:子类是父类的一种特例. (2)

Django 查询集的过滤内置条件

条件选取querySet的时候,filter表示=,exclude表示!=.querySet.distinct() 去重复__exact 精确等于 like 'aaa' __iexact 精确等于 忽略大小写 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains.__gt 大于__gte 大于等于__lt 小于__lte 小于

了解css的两大特性

CSS特性——继承性 为什么只选择了body元素,但是所有元素的字体颜色都被改了,就是因为css属性具备继承性. 继承性是指被包在内部的标签将拥有外部标签的样式性,即子元素可以继承父元素的属性. 注意:并不是所有的属性都具备继承性 具备继承性的属性: color font-开头 line-开头 text-开头 值得注意的是border是没有继承性的 CSS特性——层叠性 css层叠性是一种处理冲突的能力 选择器的权重计算 可以这样理解: 选择器里面如果有一个id,那么选择器的权重就加100 如果

Java8两大特性(一)——Stream

什么是Stream? Stream(流)是一个来自数据源的元素队列并且支持聚合操作,元素流在管道中经过中间操作,最终操作得到结果. 数据源:集合,数组,I/O channel,产生器generator. 聚合操作:类似于sql比如:filter,find,map,match,sorted. 生成流: stream() − 为集合创建串行流. parallelStream() − 为集合创建并行流. 通过例子看方法: list.stream().limit(10).sorted().forEach