赞
踩
Django
的ORM
中存在 查询集 的概念。
查询集,也称查询结果集、QuerySet
,表示从数据库中获取的对象集合。
当调⽤用如下过滤器器⽅方法时,Django
会返回查询集(⽽而不不是简单的列列表):
all()
:返回所有数据。filter()
:返回满⾜足条件的数据。exclude()
:返回满⾜足条件之外的数据。order_by()
:对结果进⾏行行排序。对查询集可以再次调⽤用过滤器器进⾏行行过滤,如
>>> films =FilmInfo.objects.filter(playcount__gt=30).order_by('pub_date')
>>> films
也就意味着查询集可以含有零个、一个或多个过滤器器。过滤器器基于所给的参数限制查询的结果。
从SQL
的⻆角度讲,查询集与select
语句句等价,过滤器器像where、limit、order by
⼦子句句。
判断某⼀一个查询集中是否有数据:
exists()
:判断查询集中是否有数据,如果有则返回True
,没有则返回False
。
1)惰性执⾏
当执⾏行行查询操作返回QuerySet时,默认查询前21条数据。
films = FilmInfo.objects.all()
查看映射SQL:select * from t_filminfo limit 21;
2)缓存
默认情况下,QuerySet
会把结果存放在内置当缓存中。 QuerySet
提供了_result_cache
的变量量专⻔门存储缓存。
films = FilmInfo.objects.all()
#当执⾏行行完这条语句句后,films._result_cache
能够查看到结果。
可以对查询集进⾏行行取下标或切⽚片操作,等同于sql
中的 limit
和 offset
⼦子句句。
注意:不不⽀支持负数索引。
对查询集进⾏行行切⽚片后返回⼀一个新的查询集,不不会⽴立即执⾏行行查询。
如果获取⼀一个对象,直接使⽤用[0]
,等同于[0E1].get()
,但是如果没有数据,[0]
引发IndexError
异常,[0E1].get()
如果没有数据引发DoesNotExist
异常。
示例:获取第1、2
项,运⾏行行查看。
>>> from film.models import FilmInfo
>>> films = FilmInfo.objects.all()[0:2]
>>> films
分页官方文档:https://docs.djangoproject.com/en/2.2/topics/pagination/
#查询数据
films = FilmInfo.objects.all()
#导⼊入分⻚页类
from django.core.paginator import Paginator
#创建分页实例
paginator=Paginator(films,2)
#获取指定页码的数据
page_skus = paginator.page(1)
#获取分页数据
total_page=paginator.num_pages
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。