PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Consultar uma coluna JSON específica (postgres) com sqlalchemy


Você está usando o agregado errado . count(expression) conta o número de linhas para as quais a expressão não é nulo. Se você quiser uma soma, use sum(expression) :
db.session.query(func.sum(Item.data['cost'].astext.cast(Numeric))).\
    filter(Item.data['surcharge'].astext.cast(Numeric) > 1).\
    scalar()

Observe que valores monetários e matemática de ponto flutuante binário são uma mistura ruim devido a floats binários não sendo capazes de representar todos os valores decimais . Em vez disso, use um tipo monetário adequado , ou Numeric nesse caso SQLAlchemy usa Decimal para representar os resultados em Python.