【django】查询集QuerySet

导读:本篇文章讲解 【django】查询集QuerySet,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、概念

Django的ORM中存在 查询集 的概念。
查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。
当调⽤如下过滤器⽅法时,Django会返回查询集(⽽不是简单的列表)
all():返回所有数据
filter():返回满⾜条件的数据
exclude():返回满⾜条件之外的数据
order_by():对结果进⾏排序

对查询集可以再次调⽤过滤器进⾏过滤,如

FilmInfo.objects.filter(fid__gt=2).order_by('pub_date')
<QuerySet [<FilmInfo: shell>, <FilmInfo: 我爱你中国>, <FilmInfo: 我和我的家人>, <FilmInfo: 夺冠>, <FilmInfo: 我爱你china>]>

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

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

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

FilmInfo.objects.filter(fid__gt=2).order_by('pub_date').exists()
True

二、两⼤特性

1、惰性执⾏
当执⾏查询操作返回QuerySet时,默认查询前21条数据。
2、缓存
默认情况下,QuerySet会把结果存放在内置当缓存中。 QuerySet提供了_result_cache 的变量专⻔存储缓存。

三、限制查询集

可以对查询集进⾏取下标或切⽚操作,等同于sql中的 limit 和 offset ⼦句。
注意:不⽀持负数索引。
对查询集进⾏切⽚后返回⼀个新的查询集,不会⽴即执⾏查询。
如果获取⼀个对象,直接使⽤[0],等同于[0:1].get(),

film=FilmInfo.objects.all()
film[0]
<FilmInfo: django>

但是如果没有数据,[0]引发IndexError异常,

film=FilmInfo.objects.all()
film[9]
IndexError: list index out of range

[0:1].get()如果没有数据引发DoesNotExist异常。

四、分页

from film.models import PeopleInfo,FilmInfo
from django.core.paginator import Paginator
fs=FilmInfo.objects.all()
pageobj=Paginator(fs,1)
<input>:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'film.models.FilmInfo'> QuerySet.
fs=FilmInfo.objects.all().order_by('playcount')
pageobj=Paginator(fs,1)
pageobj.page(1)
<Page 1 of 7>
pageobj.page(4)
<Page 4 of 7>
pageobj.num_pages
7

:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class ‘film.models.FilmInfo’> QuerySet.
表示分页前先得进行排序
from django.core.paginator import Paginator:分页类
pageobj=Paginator(fs,1):分页对象
fs:查询集;1:每页展示1条数据
pageobj.page(1):第一页
pageobj.num_pages:总页数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74269.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!