PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Interroga una specifica colonna JSON (postgres) con sqlalchemy

Stai usando l'aggregato sbagliato . count(expression) conta il numero di righe per le quali l'espressione non è nullo. Se vuoi una somma, usa sum(expression) :

db.session.query(func.sum(Item.data['cost'].astext.cast(Numeric))).\
    filter(Item.data['surcharge'].astext.cast(Numeric) > 1).\
    scalar()

Tieni presente che i valori monetari e la matematica binaria in virgola mobile sono una pessima combinazione a causa di i float binari non sono in grado di rappresentare tutti i valori decimali . Usa invece un tipo monetario o Numeric in tal caso SQLAlchemy utilizza Decimal per rappresentare i risultati in Python.