【问题标题】:sqlalchemy: multiple joins with different join types and specifying relationship to join onsqlalchemy:具有不同连接类型的多个连接并指定要连接的关系
【发布时间】:2015-06-23 22:17:26
【问题描述】:

我正在尝试进行多连接,其中每个后续表都在 relationship() 属性上使用内部 join() 连接先前连接的表,但我想要一个 outerjoin() 用于 Table4。

查询看起来像:

self.s.query(Table1, Table2, Table3, Table4) \
      .join('relationship2', 'relationship3') \
      .outerjoin('relationship4') \
      .all()

最终发生的是 Table4 尝试加入 Table1,而不是根据需要加入 Table3.relationship4,从而产生 InvalidRequestError:

InvalidRequestError: Entity '<class 'Table1'>' has no property 'relationship4'

如何指定outerjoin() 使用Table3 中的自然外键关系?

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    所以事实证明,如果您直接指定更健壮的模型类,而不是尝试加入 relationship() 属性名称,那么它非常简单。我相信这只有在两个表之间存在一个外键关系时才有效。 SQLA join docs here.

    例如,这将产生我正在寻找的内容,Table4 显示为None,其中没有匹配的行:

    self.s.query(Table1, Table2, Table3, Table4) \
      .join('relationship2', 'relationship3') \
      .outerjoin(Table4) \ # reference the model class directly here
      .all()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多