sqlalchemy join as new_name filter new_name.column == value

时间:2017-01-31 22:25:54

标签: python sqlalchemy

我正在寻找一种在过滤器中引用连接表的方法。我的疑问是:

session.query(A).outerjoin(B, C, D).filter(B.column_b == 1, C.column_c == 2)

如何在不命名模型B和C的情况下进行此类过滤?

session.query(A).outerjoin(B, C, D).filter_by(column_b=1, column_c=2)

不起作用,因为filter_by尝试在D. aliased()中找到'column_b'和'column_c',而alias()也不起作用。
我以{"column_a": 0, "column_b": 1, "column_c": 2}的形式收到field_to_value的dict,我需要创建一个查询。当然,我可以有一个像{"column_a": A.column_b, "column_b": B.column_b, "column_c": C.column_c}这样的映射。但应该有更好的方法。

有没有什么好方法可以进行这样的过滤?

1 个答案:

答案 0 :(得分:0)

filter_by适用于最后一个连接,因此您应该能够破坏外部连接。尝试:

session.query(A).outerjoin(B).filter_by(column_b == 1)
                .outerjoin(C).filter_by(column_c == 2)
                .outerjoin(D)