首页 > 解决方案 > 比较 SQLAlchemy 中的数值

问题描述

我想在我的数据库中存储非整数,并能够比较它们以发现重复项。显然,应该在预设的小数位数(例如,2)内进行比较。所以我的问题简而言之:最有效的方法是什么?

我的第一次尝试是将它们存储为数字,在 SQLAlchemy 中将是:

class MyTable(Base):
    __tablename__ = 'mytable'
    x = Column(Numeric(2, 2))

然后进行比较

session = Session()  # this was configured elsewhere
query = session.query(MyTable)
query = query.filter(MyTable.x == y)  # y is a float
return session.query(query.exists()).scalar()

现在,这失败了,如果我输入 y 作为浮点数,条件似乎会变成错误。

我可以修复上述方法吗?如果不是,那么做我想做的最干净的方法是什么?(这里快速和干净之间的权衡是什么?)我是否必须求助于将我的数据转换为字符串或整数?或者与不平等一起工作..?

标签: pythonpostgresqlsqlalchemy

解决方案


我想我解决了。似乎这些数字将作为字符串进行比较,所以我应该在比较之前将我的参考值转换为字符串:

session = Session()  # this was configured elsewhere
query = session.query(MyTable)
query = query.filter(MyTable.x == f'{y:.2f}')  # y is a float
return session.query(query.exists()).scalar()

推荐阅读