2010-07-20 12 views
6

Recientemente me actualicé a la versión más reciente de sqlalchemy y parte de mi código ya no funciona. Tengo dificultades para encontrar cómo solucionarlo y podría usar una mano.Sumar campos en sqlAlchemy

Anteriormente, la consulta aparecía como tal.

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

esta trabajado antes para recuperar la suma de las duraciones de algunos pero ahora me sale el siguiente error:

'Query' object has no attribute 'sum' 

Cualquier googlear hago me pone la información que tiene varios años.

Respuesta

11

creo que necesita la función suma() en el paquete "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() 
+0

¿por qué se utiliza escalar? ¿Cómo redondearías el número? – Tikkaty

+0

Obtengo el objeto '' TypeError: 'BaseQuery' no se puede llamar'' en Python 3 con SQLAlchemy 1.12 con: '' votes_sum = VotesReleases.query (func.sum (VotesReleases.Vote)). Filter_by (ReleaseID = release_id) .all() ''. ¿O '' func.sum() '' no representa el SQL '' SUM() ''? –

+0

Descubrí la sintaxis para SQLAlchemy moderno. He publicado una respuesta. –

0

En SQLAlchemy 1.1.13 (publicado el 3 de agosto de 2017), la sintaxis para utilizar sum() es la siguiente:

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)) 

la principal diferencia en comparación con la respuesta original es que en lugar de:
query(func.sum())

el syn impuestos ha cambiado a esta partida desde la versión 0.6.5:
query.with_entities(func.sum())

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