2015-06-23 34 views
0

我試圖做一個多連接,其中每個後續表連接在以前連接的表上,內部join()relationship()屬性,但我想outerjoin()表4。sqlalchemy:多個連接與不同的連接類型並指定要加入的關係

查詢看起來像:

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

什麼最終發生的是,表4企圖加入到表1,而不是在Table3.relationship4根據需要,生產InvalidRequestError:

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

如何指定到outerjoin()使用表3中的自然外鍵關係?

回答

0

所以事實證明,如果您直接指定更健壯的模型類,而不是嘗試加入relationship()屬性名稱,那就很簡單了。我相信只有在兩個表之間有一個外鍵關係的情況下,這纔會起作用。 SQLA join docs here.

例如,這會產生什麼,我期待的,與表4顯示爲None在沒有匹配的行:

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