Django是否在每次迭代时查询数据库?

时间:2015-01-05 18:58:03

标签: python django

在Django,如果我写:

for i in User.objects.all():
    i.active()

我知道我可以将变量设置为User.objects.all()的当前状态,然后运行循环,但我想知道python正在做什么。 Python只会获取一次用户列表,然后迭代该列表吗?或者它会在每次迭代时查询数据库吗?

2 个答案:

答案 0 :(得分:2)

来自the documentation

for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]
  

表达式列表评估一次

这部分内容与Django没有任何关系。在for x in blah之类的语句中,blah仅在循环开始时计算一次。 (从理论上讲,对象可能会在每次迭代时都做其他昂贵的事情,但正如aus_lacy的答案所示,Django并没有这样做。)

答案 1 :(得分:1)

使用.all()查询数据库时,您要查询一次并创建QuerySet对象。然后,您可以使用QuerySet执行任何操作。有关详细信息,请参阅herehere