我有一个带有 JSON 字段的模型:
class Item(db.Model)
...
data = db.Column(JSON, nullable=False)
...
数据包含一些 JSON,例如:
{
"cost": 10.00,
"passengers": 2,
"surcharge": 1.6
}
我希望能够使用过滤器获得表中所有行的成本总和。我尝试了以下方法,但这似乎不起作用。
db.session.query(func.count(Item.data['cost'])).filter(
Item.data["surcharge"].cast(Float) > 1
).scalar()
你用错了总计的. count(expression)
计算其中的行数表达不为空。如果您想要总和,请使用sum(expression)
:
db.session.query(func.sum(Item.data['cost'].astext.cast(Numeric))).\
filter(Item.data['surcharge'].astext.cast(Numeric) > 1).\
scalar()
请注意,货币值和二进制浮点数学是一个糟糕的混合,因为二进制浮点数无法表示所有十进制值。相反,使用适当的货币类型, or Numeric在这种情况下 SQLAlchemy 使用Decimal用 Python 表示结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)