django 中QuerySet特性功能詳解
Book表的數(shù)據(jù)顯示
id title price publish_id 2 Linux 30 1 3 項(xiàng)塔蘭 45 2 4 追風(fēng)箏的人 39.9 3 5 富爸爸 23 10
創(chuàng)建queryset 視圖 函數(shù), 可以使用的列表的方法,按索引,切片的方法取值,得到一個(gè)列表對(duì)象
def queryset(request): ret1 = Book.objects.all()[0] #QuerySet支持索引,切片操作 # print(ret1) #linux 得到一個(gè)具體的對(duì)象 ret2 = Book.objects.all()[1:3] # print(ret2)#<QuerySet [<Book: 項(xiàng)塔蘭>, <Book: 追風(fēng)箏的人>]> # ret3 = Book.objects.all()[:2] ret4 = Book.objects.all()[::2]# 按步長(zhǎng)取,隔一個(gè)取一個(gè),,,[::1}挨著取,一個(gè)個(gè)都取 # print(ret3)#<QuerySet [<Book: Linux>, <Book: 項(xiàng)塔蘭>]> print(ret4)#[<Book: Linux>, <Book: 追風(fēng)箏的人>]
-----
可迭代特性, iterator() ,exists()
主要是QuerySet的緩存機(jī)制,如果一次從數(shù)據(jù)庫(kù)取出很多數(shù)據(jù),就有可能導(dǎo)致程序崩潰,可以利用iterator()方法,做性能優(yōu)化,
為了判斷獲取到的對(duì)象是否有值,沒(méi)有必要遍歷所有的對(duì)象,用exists()方法()
#可迭代特性 book_list = Book.objects.all() #取出數(shù)據(jù)庫(kù)的所有對(duì)象,要考慮cache機(jī)制,如果數(shù)據(jù)量太大,程序就會(huì)崩潰 #判斷book_list 是否有值,假如有很多數(shù)據(jù),就沒(méi)有必要全部查一遍才得知有數(shù)據(jù),只要查到有1條數(shù)據(jù),就可以知道book_list有數(shù)據(jù),就用exists()方法 if book_list.exists(): print('ok') #ok ,說(shuō)明數(shù)據(jù)庫(kù)有值 #利用itertor()方法 book_list1 = Book.objects.all().iterator() #這次就不能用2次for循環(huán),第一次for循環(huán),就已經(jīng)把遍歷完了, book_list1 = Book.objects.all().iterator() #這次就不能用2次for循環(huán),第一次for循環(huán),就已經(jīng)把遍歷完了,用next()方法每次取出一個(gè)值, print(next(book_list1)) #linux print(next(book_list1))#項(xiàng)塔蘭 print(next(book_list1))#追風(fēng)箏的人 Book.objects.filter(id=2).update(price=100.00)#對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行更新,但并沒(méi)有執(zhí)行,只有在用到的時(shí)候在執(zhí)行 for obj in book_list: # 在for循環(huán)時(shí)開(kāi)始執(zhí)行sql語(yǔ)句查詢 print(obj.title,obj.price) #如果for循環(huán)2次,打印2次結(jié)果,也是執(zhí)行一次sql語(yǔ)句,因?yàn)榇嬖趕ql的緩存機(jī)制,把第一次查詢的結(jié)果放到緩存里, #下次從緩存里調(diào) """ Linux 30.00 ---沒(méi)有更新數(shù)據(jù)之前 項(xiàng)塔蘭 45.00 追風(fēng)箏的人 39.90 富爸爸 23.00 """ """ Linux 100.00 ----更新數(shù)據(jù)之后 項(xiàng)塔蘭 45.00 追風(fēng)箏的人 39.90 富爸爸 23.00 """
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python用字典統(tǒng)計(jì)單詞或漢字詞個(gè)數(shù)示例
這篇文章主要介紹了python用字典統(tǒng)計(jì)單詞或漢字詞個(gè)數(shù)示例,需要的朋友可以參考下2014-04-04Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)敵人精靈篇
相信大多數(shù)8090后都玩過(guò)太空射擊游戲,在過(guò)去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來(lái)自己動(dòng)手實(shí)現(xiàn)它,在編寫(xiě)學(xué)習(xí)中回顧過(guò)往展望未來(lái),下面開(kāi)始講解敵人精靈的使用2022-08-08使用tensorflow實(shí)現(xiàn)矩陣分解方式
今天小編就為大家分享一篇使用tensorflow實(shí)現(xiàn)矩陣分解方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02詳解Pytorch+PyG實(shí)現(xiàn)GCN過(guò)程示例
這篇文章主要為大家介紹了Pytorch+PyG實(shí)現(xiàn)GCN過(guò)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04在linux系統(tǒng)下安裝python librtmp包的實(shí)現(xiàn)方法
今天小編就為大家分享一篇在linux系統(tǒng)下安裝python librtmp包的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07python3多線程知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給各位分享的是關(guān)于python3多線程的相關(guān)知識(shí)點(diǎn)內(nèi)容,以后需要的朋友們可以參考下。2019-09-09對(duì)Python的Django框架中的項(xiàng)目進(jìn)行單元測(cè)試的方法
這篇文章主要介紹了對(duì)Python的Django框架中的項(xiàng)目進(jìn)行單元測(cè)試的方法,使用Django中的tests.py模塊可以輕松地檢測(cè)出一些常見(jiàn)錯(cuò)誤,需要的朋友可以參考下2016-04-04基于Django框架的rest_framework的身份驗(yàn)證和權(quán)限解析
Django 是一個(gè)基于 Python 的 Web 框架,可讓您快速創(chuàng)建高效的 Web 應(yīng)用程序,這篇文章主要介紹了基于Django框架的rest_framework的身份驗(yàn)證和權(quán)限解析,需要的朋友可以參考下2023-05-05