Сумма полей в sqlAlchemy - PullRequest
9 голосов
/ 20 июля 2010

Я недавно обновился до последней версии sqlalchemy, и часть моего кода больше не работает.У меня возникают трудности с поиском, как это исправить, и я могу использовать руку.

Раньше запрос выглядел так.

self.db.query(Drive).filter(Drive.package_id==package.package_id)\
    .filter(Drive.wipe_end!=None).sum(Drive.wipe_end - Drive.wipe_start)

Это работало раньше, чтобы получить сумму некоторых длительностей, но теперьЯ получаю следующую ошибку:

'Query' object has no attribute 'sum'

При любом поиске в Google я получаю информацию, которой несколько лет.

Ответы [ 2 ]

15 голосов
/ 21 июля 2010

Я полагаю, вам нужна функция sum () в пакете "func":

from sqlalchemy import func
cursor = self.db.query(func.sum(Drive.wipe_end - Drive.wipe_start)).filter(Drive.package_id==package.package_id).filter(Drive.wipe_end!=None)
total = cursor.scalar()
1 голос
/ 11 октября 2017

В SQLAlchemy 1.1.13 (выпущен 3 августа 2017 г.) синтаксис использования sum() таков:

from sqlalchemy import func
from apps.mystuff.models import MyModel

some_value = "hello"

result = MyModel.query.with_entities(
             func.sum(MyModel.MyColumn).label("mySum")
         ).filter_by(
             MyValue=some_value
         ).first()

# Depending on the column datatype, it's either int:
print(result.mySum)

# Or if the data is decimal/float:
print(float(result.mySum))

Основное отличие по сравнению с исходным ответом состоит в том, что вместо:
query(func.sum())

Синтаксис изменился на этот, начиная с версии 0.6.5:
query.with_entities(func.sum())

http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.with_entities

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...