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
分頁查詢和聯合查詢
高階九 分頁查詢 應用場景 當要顯示的資料,一頁顯示不全,需要分頁提交sql請求 語法 select 查詢列表 from 表 limit offset,seize 備註 myemployees offest 要顯示條目的起始索引 起始索引從0開始 size 要顯示的條目個數 特點 1.limit語句...
python分頁查詢 分頁查詢
分頁 使用select查詢時,如果結果集資料量很大,比如幾萬行資料,放在乙個頁面顯示的話資料量太大,不如分頁顯示,每次顯示100條。要實現分頁功能,實際上就是從結果集中顯示第1 100條記錄作為第1頁,顯示第101 200條記錄作為第2頁,以此類推。因此,分頁實際上就是從結果集中 擷取 出第m n條...
SQL查詢之限制結果集行數(分頁)
以前遇到需要查詢前幾行,或者需要分頁查詢時,經常到處找,亂 散 耗費時間,特此做一下彙總。本文只講sql,不設計orm框架。首先,我們用到的資料庫種類很多,每種資料庫提供的語法還是有很大不同的,這裡只列主流的幾種。mysql 提供了limit關鍵字用來限制返回的的結果集,limit放在select語...