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ì)象是否有值,沒有必要遍歷所有的對(duì)象,用exists()方法()
#可迭代特性
book_list = Book.objects.all() #取出數(shù)據(jù)庫(kù)的所有對(duì)象,要考慮cache機(jī)制,如果數(shù)據(jù)量太大,程序就會(huì)崩潰
#判斷book_list 是否有值,假如有很多數(shù)據(jù),就沒有必要全部查一遍才得知有數(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)行更新,但并沒有執(zhí)行,只有在用到的時(shí)候在執(zhí)行
for obj in book_list: # 在for循環(huán)時(shí)開始執(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 ---沒有更新數(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連續(xù)賦值可能引發(fā)的錯(cuò)誤
今天小編就為大家分享一篇淺談python連續(xù)賦值可能引發(fā)的錯(cuò)誤,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
利用Python3分析sitemap.xml并抓取導(dǎo)出全站鏈接詳解
因?yàn)樽罱鼡Q了網(wǎng)址,所以需要在百度站長(zhǎng)平臺(tái)提交網(wǎng)址,不管是主動(dòng)推送還是手動(dòng)提交,前提都是要整理網(wǎng)站的鏈接,手動(dòng)添加太麻煩,于是就想寫個(gè)腳本直接抓取全站鏈接并導(dǎo)出,本文詳細(xì)介紹的是實(shí)現(xiàn)的方法及過(guò)程,需要的朋友們一起來(lái)看看吧。2017-07-07
Python實(shí)現(xiàn)MySql數(shù)據(jù)庫(kù)交互的示例
本文主要介紹了Python實(shí)現(xiàn)MySql數(shù)據(jù)庫(kù)交互的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
python使用selenium打開chrome瀏覽器時(shí)帶用戶登錄信息實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了python使用selenium打開chrome瀏覽器時(shí)帶用戶登錄信息,本文以實(shí)例給大家來(lái)展示如何讓selenium在打開chrome瀏覽器的時(shí)候帶上用戶的登錄信息,感興趣的朋友跟隨小編一起看看吧2022-02-02
Python經(jīng)典題實(shí)戰(zhàn)記錄之百元買百雞
有一道著名的"百錢買百雞"問(wèn)題大家應(yīng)該都不陌生,這篇文章主要給大家介紹了關(guān)于Python經(jīng)典題實(shí)戰(zhàn)記錄之百元買百雞的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-12-12
使用OpenCV獲取圖片連通域數(shù)量,并用不同顏色標(biāo)記函
這篇文章主要介紹了使用OpenCV獲取圖片連通域數(shù)量,并用不同顏色標(biāo)記函,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
python-str,list,set間的轉(zhuǎn)換實(shí)例
今天小編就為大家分享一篇python-str,list,set間的轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06

