Агрегация django в App Engine

Я пытаюсь вычислить сумму списка записей. у меня 3 варианта

  1. customer= Customer.objects.all() Затем прокрутите этот список и рассчитайте сумму
  2. Использование агрегации Total = Customer.objects.aggregate(Sum('amount'))
  3. Использование Annotate Customer.objects.annotate(Sum('amount'))

Мой вопрос:
1. Аннотировать и агрегировать, что быстрее?
2. Я не могу использовать агрегацию в django, она выдает Эта база данных не может использовать агрегацию. Я использую хранилище данных Google App Engine


person Cuong Thai    schedule 19.03.2011    source источник


Ответы (1)


3 не вариант. Аннотирование применяется к каждому объекту, поэтому вам все равно придется суммировать «сумму» через python.

Поскольку вы говорите, что агрегация невозможна, у вас остается один выбор:

total = sum((x.amount for x in Customer.objects.all())

Или перейти на сырой GQL, чего я не знаю :D

person Yuji 'Tomita' Tomita    schedule 19.03.2011
comment
Как вы думаете, это немного медленнее, чем выполнение запроса суммы в базе данных :-) - person Cuong Thai; 19.03.2011
comment
База данных определенно быстрее. Определенно изучите сырой GQL, если это критично для производительности. В противном случае, мех, отчет здесь и там, я не против питона. - person Yuji 'Tomita' Tomita; 19.03.2011
comment
GQL не выполняет агрегацию. Это просто оболочка, использующая синтаксис, подобный SQL, для построения того же типа запроса, который вы получаете с .all(). - person Wooble; 19.03.2011