如何在sqlalchemy中加入关于共同关系的两个查询?

时间:2012-11-22 10:14:30

标签: python join sqlalchemy relationship

假设我有两个类ChildAChildB,它们都与Parent有关系。 还假设我已经定义了两个查询qaqb,它们查询相应的子类。 我希望加入qb加入qa parent

如果parent只是普通列,我可以执行以下操作:

subquery = qb.subquery()
joined_query = qa.join(subquery, AliasedChildA.parent==subquery.columns.parent)

此处,AliasedChildAChildA的别名。 (我可以完全控制查询的创建方式,但不能控制以后应用于它们的过滤器。) 但现在,由于parent是一种关系,因此它不包含在subquery.columns中。

我如何加入qaqb加入parent

3 个答案:

答案 0 :(得分:1)

如果您有复合pk,请使用AliasedChildA.parent_id == subquery.c.parent_idand_几个子句尝试。)

答案 1 :(得分:1)

尝试以下方法:

qa = session.query(ChildA)
qb = session.query(ChildB)
# @note: *qa* and *qb* may include other filters etc, 
# but assuming they do not contain joins on *Parent*
subquery = qb.subquery()
qry = qa.join(Parent).join(subquery)

答案 2 :(得分:0)

query_a.subquery().join(query_b.subquery(), $on_condition...)

为我工作:)