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

簡介

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

接下來主要介紹:查詢集、字段查詢(比較運算符晒奕,F(xiàn)對象闻书,Q對象)

查詢集

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

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

all()

filter()

exclude()

order_by()

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


返回單個值的方法:

get():返回單個滿足條件的對象

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

first():返回第一個對象

last():返回最后一個對象

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

限制查詢集

查詢集返回列表宫屠,可以使用下標的方式進行限制,等同于sql中的limit和offset子句滑蚯。注意:不支持負數(shù)索引浪蹂。使用下標后返回一個新的查詢集,不會立即執(zhí)行查詢告材。如果獲取一個對象坤次,直接使用[0],等同于[0:1].get()斥赋,但是如果沒有數(shù)據(jù)缰猴,[0]引發(fā)IndexError異常,[0:1].get()引發(fā)DoesNotExist異常

查詢集的緩存

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

在新建的查詢集中疤剑,緩存為空洛波,首次對查詢集求值時,會發(fā)生數(shù)據(jù)庫查詢骚露,django會將查詢的結(jié)果存在查詢集的緩存中,并返回請求的結(jié)果缚窿,接下來對查詢集求值將重用緩存的結(jié)果

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

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

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

querylist=Entry.objects.all()

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

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

字段查詢

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

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

比較運算符

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

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

exact:表示判等工猜,大小寫敏感;如果沒有寫“比較運算符”馅袁,表示判等

filter(id__exact=1) 其實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])查詢編號為1或2或3或4或5

gt、gte汗销、lt犹褒、lte:大于、大于等于弛针、小于叠骑、小于等于

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

year、month削茁、day宙枷、week_day、hour茧跋、minute慰丛、second:對日期間類型的屬性進行運算

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

查詢的快捷方式:pk,pk表示primary key瘾杭,默認的主鍵是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對象

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

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

Q對象

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從小到大進行排序芥永。

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末埋涧,一起剝皮案震驚了整個濱河市板辽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌飞袋,老刑警劉巖戳气,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巧鸭,居然都是意外死亡瓶您,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門纲仍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呀袱,“玉大人,你說我怎么就攤上這事郑叠∫拐裕” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵乡革,是天一觀的道長寇僧。 經(jīng)常有香客問我,道長沸版,這世上最難降的妖魔是什么嘁傀? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮视粮,結(jié)果婚禮上细办,老公的妹妹穿的比我還像新娘。我一直安慰自己蕾殴,他們只是感情好笑撞,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钓觉,像睡著了一般茴肥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荡灾,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天炉爆,我揣著相機與錄音堕虹,去河邊找鬼。 笑死芬首,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的逼裆。 我是一名探鬼主播郁稍,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胜宇!你這毒婦竟也來了耀怜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤桐愉,失蹤者是張志新(化名)和其女友劉穎财破,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體从诲,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡左痢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了系洛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俊性。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖描扯,靈堂內(nèi)的尸體忽然破棺而出定页,到底是詐尸還是另有隱情,我是刑警寧澤绽诚,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布典徊,位于F島的核電站,受9級特大地震影響恩够,放射性物質(zhì)發(fā)生泄漏卒落。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一玫鸟、第九天 我趴在偏房一處隱蔽的房頂上張望导绷。 院中可真熱鬧,春花似錦屎飘、人聲如沸妥曲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檐盟。三九已至,卻和暖如春押桃,著一層夾襖步出監(jiān)牢的瞬間葵萎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留羡忘,地道東北人谎痢。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像卷雕,于是被迫代替她去往敵國和親节猿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

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