查詢集:表示從數(shù)據(jù)庫中獲取的對(duì)象集合
查詢集可以有多個(gè)過濾器
在管理器上調(diào)用過濾方法
查詢集經(jīng)過過濾器篩選后返回一個(gè)新的查詢集,所以可以寫鏈?zhǔn)秸{(diào)用
惰性執(zhí)行 -- 創(chuàng)建查詢集不會(huì)帶來任何數(shù)據(jù)庫的訪問直到調(diào)用數(shù)據(jù)時(shí),才會(huì)訪問數(shù)據(jù)
直接訪問數(shù)據(jù)的情況
? 迭代
? 序列化
? 與if合用返回查詢集的方法就是過濾器
all()
filter() -- 返回符合條件的數(shù)據(jù)
? filter(鍵=值,鍵=值)
? filter(鍵=值).filter(鍵=值)
? 以上寫法條件都是且關(guān)系exclude() -- 過濾掉符合條件的數(shù)據(jù)
order_by() -- 排序
values() -- 一條數(shù)據(jù)就是一個(gè)對(duì)象(字典),一返回一個(gè)列表
返回單個(gè)數(shù)據(jù)
? get() -- 返回一個(gè)滿足條件的對(duì)象,如果沒有找到符合條件的對(duì)象,會(huì)引發(fā)一個(gè)模型類異常(未找到異常),如果找到對(duì)個(gè)對(duì)象也會(huì)引發(fā)一個(gè)異常count() -- 返回當(dāng)前查詢集中的對(duì)象個(gè)數(shù)
first() -- 返回查詢集中的第一個(gè)對(duì)象
last() -- 返回查詢集中的最后一個(gè)對(duì)象
exists() -- 判斷查詢集中是否有數(shù)據(jù),有返回true否則返回false
限制查詢集 -- 返回列表,可以使用下標(biāo)的方法進(jìn)行限制,等同于sql中的limit語句
? 注意:下標(biāo)不能是負(fù)數(shù)查詢集的緩存 -- 每個(gè)查詢集都包含一個(gè)緩存,來最小化的對(duì)數(shù)據(jù)庫訪問(減少數(shù)據(jù)庫的查詢壓力)
在新建的查詢集中,緩存是為空,第一次對(duì)查詢集求值(直接訪問數(shù)據(jù)庫),此時(shí)會(huì)發(fā)生緩存,在下次訪問相同的數(shù)據(jù)時(shí),會(huì)優(yōu)先訪問緩存-
字段查詢 -- 實(shí)現(xiàn)了sql中的where語句,作為過濾器的參數(shù)(條件)
語法:屬性名__比較運(yùn)算符=值
如:age__gt=20
查詢外鍵:屬性名_id
轉(zhuǎn)義:sql中的like語句中的%為通配符(模糊查詢),如果需要向匹配%則需要轉(zhuǎn)移name__contains='%'
比較運(yùn)算符
?? exact -- 判斷,大小寫敏感
?? contains -- 是否包含,大小敏感
?? startswith/endswith -- 以什么開頭/以什么結(jié)尾
?? 以上加上一個(gè)i就表示不區(qū)分大小寫
?? isnull/isnotnull -- 是否為空/不為空
?? in -- 是否包含在范圍內(nèi)
?? gt/gte/lt/lte/ -- 大于、大于等于、小于、小于等于
?? year/month/day/week_day/hour/minute/second -- 時(shí)間相關(guān)
?? 關(guān)聯(lián)查詢 -- 類sql中的內(nèi)關(guān)聯(lián)和外關(guān)聯(lián)
?? 查詢快捷 -- pk -- 主鍵聚合函數(shù) -- 使用aggregate()函數(shù)返回的值
?? AVG
?? Count
?? Max
?? Min
?? Sum
??F對(duì)象 -- 支持算數(shù)運(yùn)算和相同對(duì)象間的字段比較
??Q對(duì)象 -- 過濾器中的方法中的關(guān)鍵字參數(shù),最要做條件組合(且 &、或 | 、非 ~ )
??只有一個(gè)Q對(duì)象時(shí)就是用于單條件過濾(有跟沒有一樣)