Vous utilisez le mauvais agrégat
. count(expression)
compte le nombre de lignes pour lesquelles l'expression est non nulle. Si vous voulez une somme, utilisez sum(expression)
:
db.session.query(func.sum(Item.data['cost'].astext.cast(Numeric))).\
filter(Item.data['surcharge'].astext.cast(Numeric) > 1).\
scalar()
Notez que les valeurs monétaires et les mathématiques à virgule flottante binaire sont un mauvais mélange en raison de les flottants binaires ne pouvant pas représenter toutes les valeurs décimales
. Utilisez plutôt un type monétaire
approprié , ou Numeric
auquel cas SQLAlchemy utilise Decimal
pour représenter les résultats en Python.