


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第python中如何實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用query=XXX.objects.all()
query=query.filter(name=123,age=456).filter(salary=999)
在這種寫法里面,query對(duì)象有一個(gè)filter方法,這個(gè)方法的返回?cái)?shù)據(jù)還可以繼續(xù)調(diào)用filter方法,可以這樣無(wú)限制地調(diào)用下去。
這種寫法是怎么實(shí)現(xiàn)的呢?
如果我們直接寫一個(gè)類的方法,看看能不能這樣調(diào)用:
classQuery:
deffilter(self):
pass
query=Query()
query.filter().filter()
直接對(duì)query.filter()返回的結(jié)果再調(diào)用一次filter,就會(huì)導(dǎo)致報(bào)錯(cuò)了。這是因?yàn)樵跊]有顯式寫return語(yǔ)句的時(shí)候,方法會(huì)返回None,而None對(duì)象是沒有所謂的filter方法的。
那么什么東西有filter方法呢?顯然我們的query對(duì)象有filter方法。那么如何讓這個(gè)方法返回自身這個(gè)對(duì)象呢?
這個(gè)時(shí)候,我們就要看看我們?cè)诙x類方法的時(shí)候,總會(huì)寫的的第一個(gè)參數(shù)self了。幾乎每個(gè)類方法里面都會(huì)有它。大家只知道在類里面調(diào)用類方法的時(shí)候可以用self.xxx(),在調(diào)用類屬性的時(shí)候可以用self.yy,那么有沒有思考過,這個(gè)東西如果單獨(dú)使用會(huì)怎么樣呢?
實(shí)際上,self指的就是這個(gè)類實(shí)例化成一個(gè)對(duì)象以后,這個(gè)對(duì)象自身。而這個(gè)對(duì)象顯然是有filter方法的。所以我們修改一下filter方法,讓它返回self:
classQuery:
deffilter(self):
returnself
query=Query()
query.filter().filter()
從圖中可以看出,現(xiàn)在已經(jīng)不會(huì)報(bào)錯(cuò)了。那么回到最開始的問題,Django里面的鏈?zhǔn)秸{(diào)用傳入查詢參數(shù)是如何實(shí)現(xiàn)的呢?
實(shí)際上這里涉及到一個(gè)惰性查詢的問題。
當(dāng)我們不停調(diào)用.filter()方法的時(shí)候,Django會(huì)把這些查詢條件全部緩存起來,只有當(dāng)我們需要獲取結(jié)果,或者查詢滿足條件的數(shù)據(jù)有多少條時(shí),它才會(huì)真正地連接數(shù)據(jù)庫(kù)去查詢。
所以我們這里要模擬這個(gè)環(huán)境,把查詢條件緩存起來。
那么為了獲取調(diào)用方法時(shí)傳入的參數(shù)名,我們就要使用**kwargs參數(shù)。這個(gè)參數(shù)可以接受所有的key=value形式的參數(shù):
classQuery():
def__init__(self):
self.query_condition={}
deffilter(self,**kwargs):
self.query_condition.update(kwargs)
returnself
query=Query()
a=query.filter(name='kingname').filter(age__gt=15,address='yyyyyy').filter(salary=99999)
print(query.query_condition)
運(yùn)行效果如下圖所示:
在真正需要輸出結(jié)果的時(shí)候,再使用這些緩存的條件,去數(shù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧儲(chǔ)能制造基地建設(shè)項(xiàng)目節(jié)能評(píng)估報(bào)告
- 河南省駐馬店市第四中學(xué)2025-2026學(xué)年七年級(jí)上學(xué)期10月月考語(yǔ)文試題
- 海關(guān)考試面試題庫(kù)及答案
- 藍(lán)寶石生產(chǎn)線項(xiàng)目技術(shù)方案
- 2025年遼寧省專業(yè)技術(shù)繼續(xù)教育公需科目考試及答案
- 2025年江蘇省吳江市電工證考試題模擬試題初級(jí)電工證考試寶典(含答案)
- 2025年度昭通市專業(yè)技術(shù)人員繼續(xù)教育公需科目考試題庫(kù)(附答案)
- 2025年科室醫(yī)療質(zhì)量培訓(xùn)考核試卷含答案
- 高精度制版輥生產(chǎn)項(xiàng)目經(jīng)濟(jì)效益和社會(huì)效益分析報(bào)告
- 2025年電氣運(yùn)行安規(guī)考試題庫(kù)(含答案)
- 學(xué)堂在線 軍事歷史-第二次世界大戰(zhàn)史 期末考試答案
- 電梯司機(jī)培訓(xùn)內(nèi)容大綱
- 公安新聞宣傳課件
- 鋼制防火門維修合同范本
- 渝22TS02 市政排水管道附屬設(shè)施標(biāo)準(zhǔn)圖集 DJBT50-159
- 幼兒園干冰課件
- pbl教學(xué)課件模板
- 2025自考行政管理模擬考試試題及答案
- 《胸外心臟按壓操作》課件
- 2024-2025學(xué)年天津市河西區(qū)八年級(jí)上學(xué)期期中數(shù)學(xué)試題及答案
- 居家陪護(hù)免責(zé)合同協(xié)議
評(píng)論
0/150
提交評(píng)論