Python SQLAlchemy:如何检测/抑制重复的连接子句?

Python SQLAlchemy:如何检测/抑制重复的连接子句?,python,sqlalchemy,Python,Sqlalchemy,考虑以下示例代码(使用SQLAlchemy 1.4): 这将生成无效的SQL,同一个JOIN子句表示两次: SELECT child.id, parent.name FROM child JOIN parent ON parent.id = child.parent_id JOIN parent ON parent.id = child.parent_id WHERE parent.name = :name_1 如果执行,将导致: (MySQLdb._exceptions.Operatio

考虑以下示例代码(使用SQLAlchemy 1.4):

这将生成无效的SQL,同一个JOIN子句表示两次:

SELECT child.id, parent.name 
FROM child JOIN parent ON parent.id = child.parent_id JOIN parent ON parent.id = child.parent_id 
WHERE parent.name = :name_1
如果执行,将导致:

(MySQLdb._exceptions.OperationalError) (1066, "Not unique table/alias: 'parent'")
这是一个简单的例子,但我要说明的是,我正在通过将SQL语句传递给不同的函数来构建SQL语句,每个函数都有不同的职责,可能需要添加一个连接,该连接可能已经添加到语句中


有没有一种简单的方法可以像这样抑制重复联接?或者检查语句以查看冗余联接是否已经存在?理想情况下,可以从语句对象本身轻松确定此信息,而不必单独维护和传递该状态。

SQLAlchemy>=1.4
中,可以在
语句中找到联接的表。\u setup\u joins

joined\u tables=[联接[0]。语句中联接的parent.entity.\u setup\u joins]
对于
SQLAlchemy
(MySQLdb._exceptions.OperationalError) (1066, "Not unique table/alias: 'parent'")