更新時(shí)間:2022年10月18日13時(shí)51分 來(lái)源:傳智教育 瀏覽次數(shù):
查詢集表示從數(shù)據(jù)庫(kù)中獲取的對(duì)象集合,在管理器上調(diào)用過(guò)濾器方法會(huì)返回查詢集,查詢集可以含有零個(gè)、一個(gè)或多個(gè)過(guò)濾器過(guò)濾器基于所給的參數(shù)限制查詢的結(jié)果。
從Sql的角度,查詢集和select語(yǔ)句等價(jià),過(guò)濾器像where和limit子句
兩大特性
惰性執(zhí)行:創(chuàng)建查詢集不會(huì)訪問(wèn)數(shù)據(jù)庫(kù),直到調(diào)用數(shù)據(jù)時(shí),才會(huì)訪問(wèn)數(shù)據(jù)庫(kù),調(diào)用數(shù)據(jù)的情況包括迭代、序列化、與if合用
緩存:查詢集的結(jié)果被存下來(lái)之后,再次查詢時(shí)會(huì)使用之前緩存的數(shù)據(jù)
返回列表的過(guò)濾器如下:
all():返回所有數(shù)據(jù)
filter():返回滿足條件的數(shù)據(jù)
exclude():返回滿足條件之外的數(shù)據(jù),相當(dāng)于sql語(yǔ)句中where部分的not關(guān)鍵字
order_by():排序
返回單個(gè)值的過(guò)濾器如下:
get():返回單個(gè)滿足條件的對(duì)象
如果未找到會(huì)引發(fā)"模型類.DoesNotExist"異常
如果多條被返回,會(huì)引發(fā)"模型類.MultipleObjectsReturned"異常
count():返回當(dāng)前查詢的總條數(shù)
aggregate():聚合
exists():判斷查詢集中是否有數(shù)據(jù),如果有則返回True,沒(méi)有則返回False
示例:查詢所有,編輯booktest/views.py的index視圖,運(yùn)行查看
list=BookInfo.books.all()
限制查詢集
查詢集返回列表,可以使用下標(biāo)的方式進(jìn)行限制,等同于sql中的limit和offset子句注意:不支持負(fù)數(shù)索引使用下標(biāo)后返回一個(gè)新的查詢集,不會(huì)立即執(zhí)行查詢
如果獲取一個(gè)對(duì)象,直接使用[0],等同于[0:1].get(),但是如果沒(méi)有數(shù)據(jù),[0]引發(fā)IndexError異常,[0:1].get()引發(fā)DoesNotExist異常
示例:獲取第1、2項(xiàng),運(yùn)行查看
list=BookInfo.books.all()[0:2]
查詢集的緩存
每個(gè)查詢集都包含一個(gè)緩存來(lái)最小化對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)在新建的查詢集中,緩存為空,首次對(duì)查詢集求值時(shí),會(huì)發(fā)生數(shù)據(jù)庫(kù)查詢,django會(huì)將查詢的結(jié)果存在查詢集的緩存中,并返回請(qǐng)求的結(jié)果,接下來(lái)對(duì)查詢集求值將重用緩存的結(jié)果演示:運(yùn)行進(jìn)行shell
python manage.py shell
情況一:如下是兩個(gè)查詢集,無(wú)法重用緩存,每次查詢都會(huì)與數(shù)據(jù)庫(kù)進(jìn)行一次交互,增加了數(shù)據(jù)庫(kù)的負(fù)載
from booktest.models import BookInfo [book.id for book in BookInfo.books.all()] [book.id for book in BookInfo.books.all()]
查看數(shù)據(jù)庫(kù)日志
sudo vi /var/log/mysql/mysql.log
情況二:經(jīng)過(guò)存儲(chǔ)后,可以重用查詢集,第二次使用緩存中的數(shù)據(jù)
list=BookInfo.books.all() [book.id for book in list] [book.id for book in list]
查看數(shù)據(jù)庫(kù)日志
sudo vi /var/log/mysql/mysql.log
再升級(jí)!業(yè)務(wù)+技術(shù)并重,Python+大數(shù)據(jù)開(kāi)發(fā)課程V3.0
2022-10-11傳智教育出席ApacheCon Asia 2022開(kāi)源大會(huì),分享大數(shù)據(jù)&Python生態(tài)在傳智教育的實(shí)踐和思考
2022-10-11科學(xué)計(jì)算庫(kù)NumPy案例:酒鬼漫步
2022-10-10什么是數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)結(jié)構(gòu)的基本概念和術(shù)語(yǔ)
2022-10-07數(shù)據(jù)分析工具Pandas:算術(shù)運(yùn)算與數(shù)據(jù)對(duì)齊
2022-10-07抓住機(jī)會(huì)有多重要?未來(lái)大數(shù)據(jù)行業(yè)的機(jī)遇在...
2022-10-06北京校區(qū)