Sql 全外连接查询在 Sqlalchemy

时间:2021-03-26 11:09:31

标签: sql sqlalchemy

我有 sql 查询,我试图在其中执行完整的外连接,这在 SQL 中运行良好,但在 Alchemy 中不起作用。

Select

Table1.field1 as Table1Field1, Table1.field2 as Table1Field2, 
Table2.field1 as Table2Field1, Table2.field2 as Table2Field2, 
Table3.field1 as Table3Field1, Table3.field2 as Table3Field2, 
Table4.field1 as Table4Field1, Table4.field2 as Table4Field2, 
Table5.field1 as Table5Field1, Table5.field2 as Table5Field2, 
Table7.field1 as Table7Field1, Table7.field2 as Table7Field2 


From Table1

full outer JOIN Table2 ON Table2.T1_id = Table1.id 
full outer JOIN Table3 ON Table3.T1_id = Table1.id 
full outer JOIN Table5 ON Table5.T1_id = Table1.id 
full outer JOIN Table4 ON Table4.id = Table5.T4_id
full outer JOIN Table7 ON Table7.id = Table5.T7_id;

T1_id为Table1.id所有表中的外键

但是我在下面尝试的查询不断得到

    Please use the .select_from() method to establish an explicit left side, as well as 
providing an explcit ON clause if not present already to help resolve the ambiguity.

我尝试过的查询

session.query(Table1).join(Table2, Table3, Table4, Table5, Table7).
filter(Table2.T1_id = Table1.id, Table3.T1_id = Table1.id, Table4.T1_id =Table1.id, Table4.T5_id= Table5.id, Table4.T7_id = Table7.id).all()

我想要 sqlAlchemy 版本,我可以在其中获得 sql 查询中给出的完整外部联接。

More detailed error


 "help resolve the ambiguity." % (right,)
sqlalchemy.exc.InvalidRequestError: Don't know how to join to <class 'model.Table4'>. Please use the .select_from() method to establish an explicit left side, as well as providing an explcit ON clause if not present already to help resolve the ambiguity.

1 个答案:

答案 0 :(得分:0)

session.query(Table1).join(Table2, Table3, Table4, Table5, Table7).
filter(Table2.id = Table1.id, Table3.id = Table1.id, Table4.id = Table5.id, Table7.id = Table5.id).all()

我上面查询Table1、Table2、Table3连接,Table4、Table5 Table7连接但是这两组表没有连接。

这是一个很好的阅读: https://docs.sqlalchemy.org/en/13/orm/query.html#sqlalchemy.orm.query.Query.join.params.full

请在所有表之间建立连接然后添加full=true

    session.query(Table1).join(Table2, Table3, Table4, Table5, Table7).
        filter(Table2.id = Table1.id, Table3.id = Table1.id, 
Table4.T1.id = Table1.id, Table4.id = Table5.id, Table7.id = Table5.id,full=true).all()
相关问题