【发布时间】:2014-05-15 23:03:53
【问题描述】:
总结一下这个问题,我不能使用 SQLAlchemy 选择针对浮点值的任何实体。
例如:
m = session.query(Model).get(1);
all_m = session.query(Model).filter(Model.some_float_value, m.some_float_value)
all_m 是空的,而我希望它总是至少有一个!
如何根据任意精度过滤 SQLAlchemy 中的浮点值(例如,我可能希望匹配 0.01 或其他我可能以 0.0005 的精度过滤)。
例如,我希望能够编写一个通用函数,这样我就可以在我的代码中编写这样的查询:
session.query(Model)\
.filter(Model.foo == "bar",
match_float(Model.some_float_value, float_val, 0.025)).all()
如果有公差匹配任何在 0.025 的近似公差范围内。
但是,我对 SQLAlchemy 不是很熟悉,并且无法找到有关如何创建自定义比较函数或任何可以满足我需要的内置函数的文档。
是否有我可以使用的内置函数、为过滤器方法提供自定义比较函数的方法,或者我是否可以为此编写原始查询/过程?
附加信息:
Postgres 9.2
SQLAlchemy 0.9
值存储为双精度浮点数
所有模型都是这样定义的(它们有很多,这使得具有显式列定义的解决方案不太理想):
engine = create_engine('postgresql://user:pass@localhost:1234/database')
Base = declarative_base()
metadata = MetaData(bind=engine)
class Model(Base):
__table__ = Table('model', metadata, autoload=True)
编辑
为了清楚起见,我完全改写了我的问题。很抱歉造成混乱,我无法与人类交流......
【问题讨论】:
-
“匹配到 .01”对您意味着什么?
-
这意味着匹配任何(abs(a-b)> = 0.01)
-
或者换句话说,它只能与 45.06 比较。我可以很好地完成所有这些事情。 **我不知道该怎么做是编写一个函数,该函数返回过滤器函数中参数的有效匹配条件。 **
标签: python floating-point sqlalchemy