当前位置:   article > 正文

【Django框架】——17 Django模型——08 查询集_django查询集对象

django查询集对象

在这里插入图片描述

在这里插入图片描述

1. 概念

DjangoORM中存在 查询集 的概念。

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

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

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

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

>>> films =FilmInfo.objects.filter(playcount__gt=30).order_by('pub_date')
>>> films
  • 1
  • 2

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

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

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

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

2. 两⼤大特性

1)惰性执⾏
当执⾏行行查询操作返回QuerySet时,默认查询前21条数据。

films = FilmInfo.objects.all()
  • 1

查看映射SQL:select * from t_filminfo limit 21;

2)缓存
默认情况下,QuerySet会把结果存放在内置当缓存中。 QuerySet提供了_result_cache 的变量量专⻔门存储缓存。

films = FilmInfo.objects.all()
#当执⾏行行完这条语句句后,films._result_cache
  • 1
  • 2

能够查看到结果。

3. 限制查询集

可以对查询集进⾏行行取下标或切⽚片操作,等同于sql中的 limitoffset ⼦子句句。

注意:不不⽀支持负数索引。

对查询集进⾏行行切⽚片后返回⼀一个新的查询集,不不会⽴立即执⾏行行查询。

如果获取⼀一个对象,直接使⽤用[0],等同于[0E1].get(),但是如果没有数据,[0]引发IndexError异常,[0E1].get()如果没有数据引发DoesNotExist异常。

示例:获取第1、2项,运⾏行行查看。

>>> from film.models import FilmInfo
>>> films = FilmInfo.objects.all()[0:2]
>>> films
  • 1
  • 2
  • 3

4. 分页

分页官方文档: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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/629619
推荐阅读
相关标签
  

闽ICP备14008679号