1
我目前很難找到一種方法來減少SQLAlchemy急切加載生成的多餘JOIN
子句。我目前正在查詢TableA
,它急切地加載TableB
,TableB
急切加載TableC
。減少SQLAlchemy生成的重複JOIN子句
我的查詢也調用顯式加入到TableB
和TableC
以便過濾這些表的列。然而,它產生詳細的SQL如下所示:
SELECT * FROM TableA
JOIN TableB ON TableA.fk == TableB.id
JOIN TableC ON TableB.fk == TableC.id
LEFT OUTER JOIN TableB AS TableB_1 ON TableA.fk == TableB.id
LEFT OUTER JOIN TableC AS TableC_1 ON TableB.fk == TableC.id
我目前使用lazy='joined'
的反向引用從TableA
查詢熱切負荷TableB
和TableC
。用子查詢加載這些數據會產生一個N + 1選擇問題(因此從急切切換到延遲加載不是一種選擇)。
我試過還加入innerjoin=True
的反向引用,它用內部聯接替換了LEFT OUTER JOIN
子句(輸出中只有JOIN
)。我希望SQLAlchemy會合並相同的連接子句,但似乎並不一樣。
有沒有一種方法可以在查詢或關係上指定相同的連接子句不應該重複?
感謝。我忽略了關係文檔中的「contains_eager」部分。那正是我所期待的。 – efritz