gpt4 book ai didi

python - 在 SQLAlchemy 中查询浮点值

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:15 24 4
gpt4 key购买 nike

总结一下这个问题,我无法使用 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

值存储为 double 浮点

所有模型都是这样定义的(模型有很多,这使得具有显式列定义的解决方案不太理想):

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)

编辑

为了清楚起见,我完全改写了我的问题。抱歉让您困惑,我无法与人类沟通......

最佳答案

GeoAlchemy 中显示了一个自定义比较的具体示例(尽管它对于您的应用程序来说可能有点过大)。虽然下面链接中的示例使用边界框来比较空间坐标,但您可以使用更简单的方法在容差内实现比较。

例如,请参见此处定义“~=”和其他运算符的 Comparator 类:

http://geoalchemy-2.readthedocs.org/en/0.2.4/spatial_operators.html

既然您提到您无法找到有关如何实现自定义比较函数的文档,请参阅此处:

http://docs.sqlalchemy.org/en/latest/core/types.html#types-operators

相关说明 - 如果您想在浮点列保持在某个阈值内时防止触发数据库更新,请参阅此处的讨论:

https://groups.google.com/forum/#!msg/sqlalchemy/tCpsGZmjk_w/lOwW93qHV0sJ

(免责声明:这是基于谷歌搜索的,我是 SQLAlchemy 的新手)

关于python - 在 SQLAlchemy 中查询浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23690132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com