【django】查询集QuerySet
一、概念
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。
二、兩?特性
1、惰性執?
當執?查詢操作返回QuerySet時,默認查詢前21條數據。
2、緩存
默認情況下,QuerySet會把結果存放在內置當緩存中。 QuerySet提供了_result_cache 的變量專?存儲緩存。
三、限制查詢集
可以對查詢集進?取下標或切?操作,等同于sql中的 limit 和 offset ?句。
注意:不?持負數索引。
對查詢集進?切?后返回?個新的查詢集,不會?即執?查詢。
如果獲取?個對象,直接使?[0],等同于[0:1].get(),
但是如果沒有數據,[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:總頁數
總結
以上是生活随笔為你收集整理的【django】查询集QuerySet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【django】 F 和 Q 对象
- 下一篇: 【django】关联查询