在Django中,如果我寫:Django在每次迭代中查詢數據庫嗎?
for i in User.objects.all():
i.active()
我知道我可以一個變量設置爲User.objects.all()的當前狀態,然後運行循環,但我想知道是什麼蟒蛇真的在做。 Python只會獲得一次用戶列表,然後遍歷該列表?或者它會在每次迭代中查詢數據庫?
在Django中,如果我寫:Django在每次迭代中查詢數據庫嗎?
for i in User.objects.all():
i.active()
我知道我可以一個變量設置爲User.objects.all()的當前狀態,然後運行循環,但我想知道是什麼蟒蛇真的在做。 Python只會獲得一次用戶列表,然後遍歷該列表?或者它會在每次迭代中查詢數據庫?
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
表達式列表計算一次
這部分內容沒有什麼關係的Django。在像for x in blah
這樣的聲明中,blah
僅在循環開始時評估一次。 (理論上,對象在每次迭代中都可能會遇到其他昂貴的東西,但正如aus_lacy的答案中的參考所示,Django不會這樣做。)
如果您詢問User.objects .all()'只對整個循環計算一次,或者每次迭代計算一次,答案是「整個循環只有一次」。 – BrenBarn
https://docs.djangoproject.com/en/1.7/ref/models/querysets/#when-querysets-are-revaluated –
@BrenBarn你有什麼證據支持它嗎? – agconti