我目前很难找到一种方法来减少JOIN
SQLAlchemy 急切加载产生的多余子句。我目前正在查询TableA
,它急切地加载TableB
,并且TableB
急切地加载TableC
。
我的查询还涉及到两者的显式连接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'
加载TableB
和查询。使用子查询加载此数据会产生 N+1 选择问题(因此不能从急切加载到延迟加载)。TableC
TableA
我还尝试添加innerjoin=True
到反向引用,它LEFT OUTER JOIN
用内部连接替换了子句(仅JOIN
在输出中)。我希望 SQLAlchemy 会合并相同的连接子句,但似乎没有。
有没有办法在查询或关系上指定不应重复相同的连接子句?