Python SQLAlchemy中带有日期和混合属性的筛选查询
我有一个数据库表,其中包含year\u id、month\u id和day\u id列(都是数字)。我想做一个过滤日期的查询。为了简化它,我想添加hybrid_属性,将所提到的字段合并到date中 但当我提出疑问时 我得到一个错误Python SQLAlchemy中带有日期和混合属性的筛选查询,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,我有一个数据库表,其中包含year\u id、month\u id和day\u id列(都是数字)。我想做一个过滤日期的查询。为了简化它,我想添加hybrid_属性,将所提到的字段合并到date中 但当我提出疑问时 我得到一个错误TypeError:需要一个整数(得到类型InstrumentedAttribute) 有没有其他方法可以进行这种筛选:我不能修改db模式(因此字段应该保持不变),但同时很难将日期与3个单独的列进行比较?您需要向混合属性添加一个表达式,但它可能会因您的RDBMS而异。有
TypeError:需要一个整数(得到类型InstrumentedAttribute)
有没有其他方法可以进行这种筛选:我不能修改db模式(因此字段应该保持不变),但同时很难将日期与3个单独的列进行比较?您需要向混合属性添加一个表达式,但它可能会因您的RDBMS而异。有关sqlite的示例,请参见下文:
@hybrid_property
def created_on(self):
return date(self.year_id, self.month_id, self.day_id)
@created_on.expression
def created_on(cls):
# @todo: create RDBMS-specific fucntion
# return func.date(cls.year_id, cls.month_id, cls.day_id)
# below works on Sqlite: format to YYYY-MM-DD
return (func.cast(cls.year_id, String) + '-' +
func.substr('0' + func.cast(cls.month_id, String), -2) + '-' +
func.substr('0' + func.cast(cls.day_id, String), -2))
如果您能够做到这一点,我建议您在数据库中创建一个带有
DATE
值的计算列。我不确定是否还有其他RDBMS,但在MSSQL中,您甚至可以持久化计算列并在其上创建索引。您还需要为SA Accorringly配置此列(请参阅)。亲爱的各位,请改进答案-如果您知道的话,请简化sqlite的日期转换。非常感谢。
session.query(MyModel).filter(MyModel.created_on==date(2010, 2, 2))
@hybrid_property
def created_on(self):
return date(self.year_id, self.month_id, self.day_id)
@created_on.expression
def created_on(cls):
# @todo: create RDBMS-specific fucntion
# return func.date(cls.year_id, cls.month_id, cls.day_id)
# below works on Sqlite: format to YYYY-MM-DD
return (func.cast(cls.year_id, String) + '-' +
func.substr('0' + func.cast(cls.month_id, String), -2) + '-' +
func.substr('0' + func.cast(cls.day_id, String), -2))