04、查询集:限制查询 和 分页查询

tech2022-08-23  116

1、查询结果集

--查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 --当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。 filter():返回满足条件的数据。 exclude():返回满足条件之外的数据。 order_by():对结果进行排序。 --判断某一个查询集中是否有数据: exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。

2、两个特性

--惰性执行: 创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用 --说明: --当执行如下语句时,并未进行数据库查询,只是创建了一个查询集books: books = BookInfo.objects.all() --继续执行遍历迭代操作后,才真正的进行了数据库的查询: for book in books: print(book.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]

3、查询结果集的 限制查询

--既然查询结果集是列表,则可以使用切片的方式取出特定数量的查询结果 --可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。 --如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常,[0:1].get()如果没有数据引发DoesNotExist异常。 --示例代码: books = BookInfo.objects.all()[0:2] books

4、分页

# 导入分页类 from django.core.paginator import Paginator # 查询数据 books = BookInfo.objects.all() #创建分页实例 paginator=Paginator(books,2) # 获取指定页码的数据,记住页码从1开始,不包括0 page_skus = paginator.page(1) # 获取总的页数 total_page=paginator.num_pages

 

最新回复(0)