Używasz niewłaściwego agregatu
. count(expression)
zlicza liczbę wierszy, dla których wyrażenie nie jest pusta. Jeśli chcesz sumę, użyj sum(expression)
:
db.session.query(func.sum(Item.data['cost'].astext.cast(Numeric))).\
filter(Item.data['surcharge'].astext.cast(Numeric) > 1).\
scalar()
Pamiętaj, że wartości pieniężne i binarna matematyka zmiennoprzecinkowa to zła mieszanka z powodu zmiennoprzecinkowe binarne nie mogą reprezentować wszystkich wartości dziesiętnych
. Zamiast tego użyj właściwego typu pieniężnego
lub Numeric
w takim przypadku SQLAlchemy używa Decimal
do reprezentowania wyników w Pythonie.