PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Interroger une colonne JSON spécifique (postgres) avec sqlalchemy

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.