Python SQLAlchemy:如何检测/抑制重复的连接子句?
考虑以下示例代码(使用SQLAlchemy 1.4): 这将生成无效的SQL,同一个JOIN子句表示两次: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
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'")