2010-07-20 16 views
6

Recentemente ho aggiornato alla versione più recente di sqlalchemy e alcuni dei miei codici non funzionano più. Sto avendo difficoltà a trovare come aggiustarlo e potrei usare una mano.Campi di somma in sqlAlchemy

In precedenza la query appariva come tale.

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

questo ha lavorato, prima di recuperare la somma di alcune durate, ma ora ottengo il seguente errore:

'Query' object has no attribute 'sum' 

Qualsiasi googling che faccio mi ottiene le informazioni che sono diversi anni.

risposta

11

Credo che hai bisogno la funzione sum() nel pacchetto "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

perché hai usato scalare? Come arrotondare il numero? – Tikkaty

+0

Ottiene l'oggetto '' TypeError: 'BaseQuery' non è callable'' in Python 3 con SQLAlchemy 1.12 con: '' voti_sum = VotesReleases.query (func.sum (VotesReleases.Vote)). Filter_by (ReleaseID = release_id) .all() ''. Oppure '' func.sum() '' non rappresenta lo SQL '' SUM() ''? –

+0

Ho scoperto la sintassi per SQLAlchemy moderno. Ho postato una risposta. –

0

In SQLAlchemy 1.1.13 (rilasciato 3 Agosto 2017), la sintassi per l'utilizzo sum() è questa:

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 differenza principale rispetto alla risposta originale è che, invece di:
query(func.sum())

lo syn fiscale è cambiato per questo a partire dalla versione 0.6.5:
query.with_entities(func.sum())

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