Django queryset и генератор
просто ни с того ни с сего мне интересно, если следующий способ итерации через результирующий набор с помощью генератора вызовет какое-либо положительное или отрицательное влияние на нормальную итерацию?
например.
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)
2 ответов
первый будет медленнее, так как он создаст список, содержащий все модели, а затем даст их по одному, в то время как последний будет просто использовать список напрямую. Если вы хотите генератор, то вы должны использовать QuerySet.iterator()
.
нет. Кроме того, что это более многословно, избыточно и не особенно полезно (в контексте генератора, который вы предоставили).
когда вы Item.objects.all()
на for
, они повторяются с помощью итератор кэширование запросов (источник). Если вы не хотите кэшировать результаты, используйте iterator()
как Игнасио рекомендует.