django中queryset的兩大特性

2021-10-07 03:53:49 字數 730 閱讀 4315

roles = roleinfo.objects.all()

建立查詢集的時候,是不會訪問資料庫的,直到真正的呼叫資料的時候,才會訪問資料庫,所以 roles = roleinfo.objects.all(),沒有真正的進行資料庫查詢的,只是建立了乙個資料庫查詢集

呼叫資料,真正的使用資料:

1、迭代

2、序列化

3、與if合用

序列化與反序列化

序列化:將python資料型別轉化成json字串

反序列化:將json字串轉化成python資料型別

[obj.name for obj in roleinfo.objects.all()]

[obj.name for obj in roleinfo.objects.all()]

當前狀態下,兩次在進行列表推導式的過程中,分別對查詢集進行了連線資料庫的查詢操作,兩次都連線了資料庫,但是兩次的查詢結果是一致的,增加了資料庫的負載,每一次都對資料庫進行了互動。

django的查詢集會有快取機制,當第一次真正連線資料庫查詢的時候,會將結果進行快取,每一次使用查詢結果的時候,就可以重用查詢集,減少了互動

案例:

role_set = roleinfo.objects.all()

[obj.name for obj in role_set]

[obj.name for obj in role_set]

django 擴充套件 補丁 QuerySet

django get方法預設獲取不到物件就丟擲異常,但是對於處理資料來說,每次都去try catch 會讓我很煩,用過了odoo 覺得django 這點預設很不友好 odoo 獲取不到會返回none 對於這個問題,原諒我api沒看完整 也可以說記憶不深 我馬上想到的是打補丁,去api檢視資料後,發現...

django中queryset的切片是左閉右開嗎

原文 學習老王python的 提高model效率的方法 時,看到分片可以對queryset用,手動試了一下,發現了點特殊的情況。原文建議使用 news news.objects.all 1 10 而非 news news.objects.all news news 1 10 經測試發現,因為quer...

Django中QuerySet的結果是否為空的判斷

目錄有時需要對queryset的結果是否為空進行判斷,那麼不 方便 使用django自帶的方式情況下,如何進行判斷呢,又有多少種方式呢?一共有三種方式,接下來通過簡單例項予以一一介紹。其中account為自定義model 有如下物件 user account.objects.filter usern...