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

Python Django是否在每次迭代时查询数据库?,python,django,Python,Django,在Django,如果我写: for i in User.objects.all(): i.active() 我知道我可以将变量设置为User.objects.all()的当前状态,然后运行循环,但我想知道python到底在做什么。Python会只获取一次用户列表,然后迭代该列表吗?或者它会在每次迭代时查询数据库吗?当您使用.all()查询数据库时,您正在查询一次并创建一个QuerySet对象。然后,您可以使用该QuerySet执行任何操作。有关详细信息,请参阅和。当您使用.all()查

在Django,如果我写:

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

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

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

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

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

当您使用
.all()
查询数据库时,您只需查询一次并创建一个
QuerySet
对象。然后,您可以使用该
查询集执行任何操作
有关更多信息,请参阅和。

来自:

表达式列表计算一次

这部分内容与Django无关。在类似于
for x In blah
的语句中,
blah
仅在循环开始时计算一次。(理论上,对象在每次迭代中都可能对其他昂贵的东西进行修改,但正如aus_lacy答案中的引用所示,Django不会这样做。)

来自:

表达式列表计算一次

这部分内容与Django无关。在类似于
for x In blah
的语句中,
blah
仅在循环开始时计算一次。(理论上,对象在每次迭代中都可能对其他昂贵的东西进行修改,但正如aus_lacy答案中的引用所示,Django不会这样做。)

来自:

表达式列表计算一次

这部分内容与Django无关。在类似于
for x In blah
的语句中,
blah
仅在循环开始时计算一次。(理论上,对象在每次迭代中都可能对其他昂贵的东西进行修改,但正如aus_lacy答案中的引用所示,Django不会这样做。)

来自:

表达式列表计算一次


这部分内容与Django无关。在类似于
for x In blah
的语句中,
blah
仅在循环开始时计算一次。(从理论上讲,对象在每次迭代时可能会对其他昂贵的东西进行处理,但正如aus_lacy答案中的引用所示,Django不会这样做。)

如果您询问
User.objects.all()
是否对整个循环或每次迭代只计算一次,则答案是“对整个循环只计算一次”@BrenBarn你有证据支持吗?我建议你使用。通过这种方式,您可以始终看到正在执行的查询。如果您询问
User.objects.all()
是对整个循环只计算一次还是每次迭代计算一次,答案是“对整个循环只计算一次”。@BrenBarn您有任何证据支持它吗?我建议您使用。通过这种方式,您可以始终看到正在执行的查询。如果您询问
User.objects.all()
是对整个循环只计算一次还是每次迭代计算一次,答案是“对整个循环只计算一次”。@BrenBarn您有任何证据支持它吗?我建议您使用。通过这种方式,您可以始终看到正在执行的查询。如果您询问
User.objects.all()
是对整个循环只计算一次还是每次迭代计算一次,答案是“对整个循环只计算一次”。@BrenBarn您有任何证据支持它吗?我建议您使用。这样,您就可以随时看到正在执行的查询。
for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]