Django 是否在每次迭代时查询数据库?
Does Django query the database on every iteration?
在 Django 中,如果我写:
for i in User.objects.all():
i.active()
我知道我可以将变量设置为 User.objects.all() 的当前状态,然后运行循环,但我想知道 python 到底在做什么。 Python 是否只获取一次用户列表然后遍历该列表?或者它会在每次迭代时查询数据库吗?
当您使用 .all()
查询数据库时,您查询了一次并创建了一个 QuerySet
对象。然后你可以用它做任何你想做的事 QuerySet
有关更多信息,请参阅 here and here.
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
The expression list is evaluated once
这部分与Django 没有任何关系。在像 for x in blah
这样的语句中,blah
只在循环开始时计算一次。 (理论上,对象可能会在每次迭代中对其他昂贵的东西执行操作,但正如 aus_lacy 的答案中的引用所示,Django 不会这样做。)
在 Django 中,如果我写:
for i in User.objects.all():
i.active()
我知道我可以将变量设置为 User.objects.all() 的当前状态,然后运行循环,但我想知道 python 到底在做什么。 Python 是否只获取一次用户列表然后遍历该列表?或者它会在每次迭代时查询数据库吗?
当您使用 .all()
查询数据库时,您查询了一次并创建了一个 QuerySet
对象。然后你可以用它做任何你想做的事 QuerySet
有关更多信息,请参阅 here and here.
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
The expression list is evaluated once
这部分与Django 没有任何关系。在像 for x in blah
这样的语句中,blah
只在循环开始时计算一次。 (理论上,对象可能会在每次迭代中对其他昂贵的东西执行操作,但正如 aus_lacy 的答案中的引用所示,Django 不会这样做。)