pycharm數(shù)據(jù)庫模型查詢

簡介

查詢集表示從數(shù)據(jù)庫中獲取的對(duì)象集合。查詢集可以含有零個(gè)、一個(gè)或多個(gè)過濾器。過濾器基于所給的參數(shù)限制查詢的結(jié)果。從Sql的角度,查詢集和select語句等價(jià),過濾器像where和limit子句

接下來主要介紹:查詢集、字段查詢(比較運(yùn)算符,F(xiàn)對(duì)象,Q對(duì)象)

查詢集

在管理器上調(diào)用過濾器方法會(huì)返回查詢集。查詢集經(jīng)過過濾器篩選后返回新的查詢集,因此可以寫成鏈?zhǔn)竭^濾。惰性執(zhí)行:創(chuàng)建查詢集不會(huì)帶來任何數(shù)據(jù)庫的訪問,直到調(diào)用數(shù)據(jù)時(shí),才會(huì)訪問數(shù)據(jù)庫。何時(shí)對(duì)查詢集求值:迭代,序列化,與if合用

返回查詢集的方法,被稱為過濾器:

all()

filter()

exclude()

order_by()

values():一個(gè)對(duì)象構(gòu)成一個(gè)字典,然后構(gòu)成一個(gè)列表返回


返回單個(gè)值的方法:

get():返回單個(gè)滿足條件的對(duì)象

count():返回當(dāng)前查詢的總條數(shù)

first():返回第一個(gè)對(duì)象

last():返回最后一個(gè)對(duì)象

exists():判斷查詢集中是否有數(shù)據(jù),如果有測返回True

限制查詢集

查詢集返回列表,可以使用下標(biāo)的方式進(jìn)行限制,等同于sql中的limit和offset子句。注意:不支持負(fù)數(shù)索引。使用下標(biāo)后返回一個(gè)新的查詢集,不會(huì)立即執(zhí)行查詢。如果獲取一個(gè)對(duì)象,直接使用[0],等同于[0:1].get(),但是如果沒有數(shù)據(jù),[0]引發(fā)IndexError異常,[0:1].get()引發(fā)DoesNotExist異常

查詢集的緩存

每個(gè)查詢集都包含一個(gè)緩存來最小化對(duì)數(shù)據(jù)庫的訪問

在新建的查詢集中,緩存為空,首次對(duì)查詢集求值時(shí),會(huì)發(fā)生數(shù)據(jù)庫查詢,django會(huì)將查詢的結(jié)果存在查詢集的緩存中,并返回請(qǐng)求的結(jié)果,接下來對(duì)查詢集求值將重用緩存的結(jié)果

情況一:這構(gòu)成了兩個(gè)查詢集,無法重用緩存,每次查詢都會(huì)與數(shù)據(jù)庫進(jìn)行一次交互,增加了數(shù)據(jù)庫的負(fù)載

print([e.title for e in Entry.objects.all()])? ?|? ? print([e.title for e in Entry.objects.all()])

情況二:兩次循環(huán)使用同一個(gè)查詢集,第二次使用緩存中的數(shù)據(jù)

querylist=Entry.objects.all()

print([e.title for e in querylist])? ? ? ? |? ? ? ?print([e.title for e in querylist])

何時(shí)查詢集不會(huì)被緩存:當(dāng)只對(duì)查詢集的部分進(jìn)行求值時(shí)會(huì)檢查緩存,但是如果這部分不在緩存中,那么接下來查詢返回的記錄將不會(huì)被緩存,這意味著使用索引來限制查詢集將不會(huì)填充緩存,如果這部分?jǐn)?shù)據(jù)已經(jīng)被緩存,則直接使用緩存中的數(shù)據(jù)

字段查詢

實(shí)現(xiàn)where子名,作為方法filter()、exclude()、get()的參數(shù)

語法:屬性名稱__比較運(yùn)算符=值。表示兩個(gè)下劃線,左側(cè)是屬性名稱,右側(cè)是比較類型。對(duì)于外鍵,使用“屬性名_id”表示外鍵的原始值。轉(zhuǎn)義:like語句中使用了%與,匹配數(shù)據(jù)中的%與,在過濾器中直接寫,例如:filter(title__contains="%")=>where title like '%\%%',表示查找標(biāo)題中包含%的

比較運(yùn)算符

exclude:返回不滿足條件的數(shù)據(jù) --->filter取反

BookInfo.book.exclude(id=3).count()查詢所有id不為3的圖書有多少本

exact:表示判等,大小寫敏感;如果沒有寫“比較運(yùn)算符”,表示判等

filter(id__exact=1) 其實(shí)exact也可以省略filter(id=1)

contains:是否包含,大小寫敏感

filter(name__contains='傳') 查詢名字里包含傳的

filter(name__startswith='傳')查詢以傳開頭的

filter(name__endswith='王').values() 查詢以王為結(jié)尾的

isnull空值查詢

filter(btitle__isnull=False)查詢不為空的值

in:范圍查詢

filter(id_in=[1,2,3,4,5])查詢編號(hào)為1或2或3或4或5

gt、gte、lt、lte:大于、大于等于、小于、小于等于

filter(id__gt=3) 查詢id大于3

year、month、day、week_day、hour、minute、second:對(duì)日期間類型的屬性進(jìn)行運(yùn)算

filter(bpub_date__year=1980)? ? ? ?filter(bpub_date__gt=date(1980, 12, 31))

查詢的快捷方式:pk,pk表示primary key,默認(rèn)的主鍵是id

filter(pk__lt=6)

聚合函數(shù)

使用aggregate()函數(shù)返回聚合函數(shù)的值。函數(shù):Avg,Count,Max,Min,Sum

from django.db.models import Max

BookInfo.book.aggregate(Max('age')) 查詢年齡最大的

F對(duì)象

BookInfo.book.filter(bread__gt = F('bcomment'))查詢圖書閱讀量大于評(píng)論量的圖書信息

BookInfo.book.filter(bread__gt = F('bcomment')*2)查詢圖書閱讀量大于2倍的評(píng)論量的圖書信息

Q對(duì)象

BookInfo.book.filter(Q(id__gt=3)|Q(bread__gt=30))查詢id大于3或者閱讀量大于30的圖書信息

BookInfo.book.filter(~Q(id=3))查詢id不等于3圖書的信息

order_by

BookInfo.book.all().order_by('id')查詢所有圖書的信息,按照id從小到大進(jìn)行排序。

BookInfo.book.all().order_by('-id').values()查詢所有圖書的信息,按照id從大到小進(jìn)行排序。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢集API 參...
    陽光小鎮(zhèn)少爺閱讀 3,958評(píng)論 0 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • Django 1.8.2 文檔Home | Table of contents | Index | Modules...
    軒轅小愛閱讀 2,425評(píng)論 0 2
  • 元選項(xiàng) ? 在模型類中定義類 Meta,用于設(shè)置元信息? 元信息db_table:定義數(shù)據(jù)表名稱,推薦使用小寫字母...
    流藍(lán)淺閱讀 482評(píng)論 0 0
  • 生活中有很多事是仿佛意想不到,又仿佛在意料之中的。比如這次參加雙證班的培訓(xùn),當(dāng)初只是突發(fā)奇想,想看看網(wǎng)上有沒有...
    吳同9閱讀 319評(píng)論 4 5

友情鏈接更多精彩內(nèi)容