混合属性表达式中的SQLAlchemy多重提取

时间:2018-12-03 14:01:29

标签: python sqlalchemy

我有一个带有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)

我不想在一个月和一天之间分隔属性,如何使其与元组输入一起工作?甚至有可能吗?

1 个答案:

答案 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)