SQLAlchemy别名manytomy关系中的联接表

2024-09-30 20:38:49 发布

您现在位置:Python中文网/ 问答频道 /正文

在我们拥有的传统数据库中,有一个非常特殊的数据结构,其中两个多对多关系将同两个表连接在一起公司paymentschedules。在

使用名为companys\u paymentschedules的关联表存在多对多关系,而第二个多对多关系使用名为companys\u paymentschedules的关联表。 两种关系的目的不同。在

companys\u paymentschedules存储公司有折扣的paymentschedules,companys\u paymentschedules存储与公司链接的paymentschedules。在

(我知道可以通过用一个查找表替换这些表来简化这一点,但在这个旧数据库中这不是一个选项。)

问题是,我需要在同一个查询中连接两种类型的公司(折扣公司和链接公司)。SQLAlchemy连接这两个表没有问题,但它也连接companies表,并将它们都称为“companys”,这会导致SQL语法错误(使用MSSQL BTW)。在

以下是查询:

q = Paymentschedules.query
# join companies if a company is specified
if company is not None:
    q = q.join(Paymentschedules.companies)
    q = q.join(Paymentschedules.companies_with_reduction)

我们的公司模型中都定义了多对多关系,如下所示:

^{pr2}$

问题是联接会触发SQLAlchemy来创建如下所示的SQL语句:

FROM paymentschedules
JOIN companies_comp_paymentschedules AS companies_comp_paymentschedules_1 ON paymentschedules.pmsd_id = companies_comp_paymentschedules_1.pmsd_id
JOIN companies ON companies.comp_id = companies_comp_paymentschedules_1.comp_id
JOIN companies_paymentschedules AS companies_paymentschedules_1 ON paymentschedules.pmsd_id = companies_paymentschedules_1.pmsd_id
JOIN companies ON companies.comp_id = companies_paymentschedules_1.comp_id

两个查找表的名称不同,但“相关公司”表在这两种情况下都称为“公司”,从而导致SQL错误:

[SQL Server Native Client 11.0][SQL Server]The objects "companies" and "companies" in the FROM clause have the same exposed names. Use correlation names to distinguish them. (1013) (SQLExecDirectW); ...]

我一直在寻找一种方法来别名一个联接,或者也许将我的查找表中的一个关系别名为companies表,但我无法做到。在

有没有一种方法可以别名联接的多对多表?在

更新:

根据@IljaEveriläI的建议,我发现了这样一个方法:http://docs.sqlalchemy.org/en/latest/orm/query.html?highlight=onclause(请参见“通过on子句联接到目标)”,作为一种对联接表进行别名的方法,但该示例只显示了如何对一对多类型联接进行别名。在我的例子中,我需要别名我的查找表的另一边,这样我就不能将示例代码应用于我的情况。在


Tags: 方法id数据库sql关系on公司companies