sql >> Base de Datos >  >> RDS >> PostgreSQL

Consulta una columna JSON específica (postgres) con sqlalchemy

Estás usando el agregado incorrecto . count(expression) cuenta el número de filas para las que la expresión No es nulo. Si desea una suma, use sum(expression) :

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

Tenga en cuenta que los valores monetarios y las matemáticas binarias de coma flotante son una mala combinación debido a flotantes binarios que no pueden representar todos los valores decimales . En su lugar, utilice un tipo monetario adecuado. , o Numeric en cuyo caso SQLAlchemy usa Decimal para representar los resultados en Python.