Django: Вычислите Сумму значений столбцов через запрос

У меня есть модель

class ItemPrice( models.Model ):
     price = models.DecimalField ( max_digits = 8, decimal_places=2 )
     ....

Я попробовал это для вычисления суммы price в этом queryset:

items = ItemPrice.objects.all().annotate(Sum('price'))

что случилось в этом запросе? или есть ли любой другой способ вычислить Сумму price столбец?

Я знаю, что это может быть сделано при помощи для цикла на queryset, но мне нужно изящное решение.

Спасибо!

57
задан 7 October 2015 в 13:44

1 ответ

Используя cProfile профилировщик , я нахожу, что в моей среде разработки, более эффективно (быстрее) суммировать значения списка, чем к агрегату с помощью Sum(). например:

sum_a = sum([item.column for item in queryset]) # Definitely takes more memory.
sum_b = queryset.aggregate(Sum('column')).get('column__sum') # Takes about 20% more time.

я протестировал это в различных контекстах, и кажется, что использование aggregate берет всегда дольше для приведения к тому же результату. Хотя я подозреваю, что могли бы быть преимущества, мудрые памятью для использования его вместо того, чтобы суммировать список.

1
ответ дан 1 November 2019 в 15:24

Другие вопросы по тегам:

Похожие вопросы: