04 查詢集 限制查詢 和 分頁查詢

2021-10-24 06:10:25 字數 1673 閱讀 5876

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語...