Python學習---django惰性機制

來源:互聯網
上載者:User

標籤:obj   first   結果   迴圈   iterator   lte   python學習   pytho   objects   

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惰性機制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.