偽代碼:
class TestModel(models.Model):
a = models.CharField()
b = models.CharField()
qs = Model.objects.filter(a="something") # returns qs containing 5 objects
obj = qs.get(b='something_else') # evaluates the queryset and hits the db
obj2 = qs.get(b='something_else_2') # evaluates again? hits db again?
現在在分配 to 時obj2,它會再次命中 db 嗎?甚至在分配給 db 時它會命中 dbobj嗎?
uj5u.com熱心網友回復:
QuerySets 是懶惰的,這意味著你qs不會被評估,除非你以某種方式“消費”它(例如通過迭代它,呼叫它len(…),str(…)等等)。
您使用qs作為基本查詢集來通過兩個.get(…)呼叫進行兩個查詢。這些都將導致一個旨在獲取單個記錄的查詢。因此,Django 將進行兩個查詢,其中一個是:
SELECT model.a, model.b FROM model WHERE a= something and b= something_else
和:
SELECT model.a, model.b FROM model WHERE a= something and b= something_else_2
因此,首先構造一個通用查詢集qs不會對性能產生影響,但例如在軟體設計方面可能更方便。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/487015.html
