Python學習 django惰性機制

2022-07-03 14:00:14 字數 1758 閱讀 6644

django惰性機制

所謂惰性機制:publisher.objects.all()或者.filter()等都只是返回了乙個queryset(查詢結果集物件),它並不會馬上執行sql,而是當呼叫queryset的時候才執行。

惰性機制之可迭代

# objs=models.book.objects.all() # [obj1,obj2,ob3...]

# for obj in objs: # 每一obj就是乙個行物件,此時會執行sql

# print("obj:",obj)

惰性機制之可切片

# objs=models.book.objects.all() # [obj1,obj2,ob3...]

# print(objs[1])

# print(objs[1:4])

# print(objs[::-1])

惰性機制之django快取問題

django有自己的快取,如果2次的obj物件一致,第二次的查值直接從快取中取值。

如果期間資料庫的內容作了更改,則需要重新查值。否則容易產生髒資料。

可以直接利用第一次的obj物件直接進行update操作,這樣下次for迴圈查詢時又重新執行了資料庫查詢操作,此時快取也作了更改; 也可以重新手動查詢一下結果,但是不推薦這樣,因為我們並不知道資料什麼時候會進行修改,妥善的還是django用資料時自己去查詢資料結果

注意1:如果2次操作之間有資料進行了修改 ,則需要重新從資料庫中查值,否則django會從快取中取出資料,影響最後的查詢結果。

# objs=models.book.objects.all()    # [obj1,obj2,ob3...]

# for obj in objs: # 每一obj就是乙個行物件,此時會執行sql

# print("obj:",obj)

models.bool.update.get(id=2).update('title'='yyy') # 資料庫內更改,快取未更改

# objs=models.book.objects.all() 重新從資料庫內查詢並賦值給objs

# objs.update(title='yyy') 推薦使用,直接資料庫/記憶體都更改了,下面for迴圈查詢時重新執行了資料庫

# objs=models.book.objects.all() # [obj1,obj2,ob3...]

# for obj in objs:

# print("obj:",obj) # 還是objs物件,所以從快取中取值

正確操作

1. 重新執行查詢 objs=models.book.objects.all() 【不推薦】

2. 利用objs.update(title='yyy');  此時資料庫已經更改,快取內的值也做了更改

注意2:

if objs():        查詢資料庫,並且將查詢的所有資料結果放入資料庫內

if objs.exist(): 僅僅查詢資料庫,但是不會把所有的資料放入資料庫內,

if obj.iterator():資料放入迭代器內,用一次迭代一次取一次即可

python學習之 Django初探

django的安裝 在官網上可以看到,安裝有2種方法,一種是直接pip,還有一種是git 我在我的windows上安裝django,已經配置好了script的路徑 直接esay install django django被安裝在 c python27 lib site packages 建立第乙個工...

Python基礎學習 Django基礎

總結一下今天的學習 1,使用黑視窗構建django專案失敗,至今未找到原因 2,使用django結合eclipse構建了乙個簡單的helloworld 介面 3,在模板檔案html檔案裡面編寫 顯示views中傳來的字串 字典 物件 方法 列表等 搭建過程 見笑了 開啟eclipse,安裝環境 新建...

Python程式設計 Django初步學習

安裝完django 執行cmd 建立專案 python django admin startproject myblog 檢視專案內容 python manage.py wsgi.py python web server gateway inte ce python伺服器閘道器介面 啟動伺服器,埠號...