【发布时间】:2014-08-01 15:36:57
【问题描述】:
我有一个包含 year_id、month_id 和 day_id 列的数据库表(都是 NUMBER)。我想做一个过滤日期的查询。为了简化它,我想添加 hybrid_property 以将提到的字段一起加入到日期中。
class MyModel(Base): __table__ = Base.metadata.tables['some_table'] @hybrid_property def created_on(self): return date(self.year_id, self.month_id, self.day_id)
但是当我查询时
session.query(MyModel).filter(MyModel.created_on==date(2010, 2, 2))
我收到一个错误TypeError: an integer is required (got type InstrumentedAttribute)。
是否有另一种方法进行此类过滤:我无法修改数据库架构(因此字段应保持不变),但同时很难将日期与 3 个单独的列进行比较?
【问题讨论】:
-
如果你能做到,我建议在数据库上创建一个计算列,其值为
DATE。我不确定其他 RDBMS,但在 MSSQL 中,您甚至可以保留计算列并在其上创建索引。您还需要相应地为 SA 配置此列(请参阅docs.sqlalchemy.org/en/latest/core/…)。
标签: python sql sqlalchemy