Django的查询集和发电机(Django queryset and generator)

2019-09-22 04:41发布

刚走出蓝色的我不知道是否通过使用发电机组结果进行迭代通过以下方式将导致对正常的迭代任何正面或负面的影响?

例如。

def all_items_generator():
  for item in Item.objects.all():
    yield item

for item in all_items_generator():
  do_stuff_with_item(item)

反对:

for item in Item.objects.all():
  do_stuff_with_item(item)

Answer 1:

前者会慢一些,因为它会创建一个包含所有车型列表,然后得到他们一次一个,而后者只会直接使用该列表。 如果你想要一台发电机,那么你应该使用QuerySet.iterator()来代替。



Answer 2:

号除了事实,这是更详细的,多余的,并没有什么特别有用的(在发电机中您所提供)。

当你做Item.objects.all()for ,他们使用迭代的迭代器与查询缓存( 源 )。 如果你不想要的结果被缓存做,使用iterator()一样伊格纳西奥建议。



文章来源: Django queryset and generator