我有一个带有Column(Date)
的表,我想用元组(month, day)
过滤查询,如下所示:
ses.query(MyTable).filter_by(month_day=(3, 25))
因此在我的桌子内,我创建了一个混合属性:
class DataLine(Base):
# ....
@hybrid_property
def date_month_day(self): # this is working for output
return self.date.month, self.date.day
@date_month_day.expression
def date_month_day(self): # does not work for querying
# return always empty results
return extract('month', DataLine.date), extract('day', DataLine.date)
我不想在一个月和一天之间分隔属性,如何使其与元组输入一起工作?甚至有可能吗?
答案 0 :(得分:2)
就是在混合属性表达式中使用tuple_()
构造:
@date_month_day.expression
def date_month_day(self):
return tuple_(extract('month', DataLine.date), extract('day', DataLine.date))
之所以不起作用的原因是,由于您的表达式返回了普通的Python tuple
,因此比较是在Python中进行的,结果为False
。换句话说,您有效地拥有
filter(False)