SqlAlchemy中的联接查询

2024-05-13 20:35:12 发布

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

我在MySQL中有一个查询:

SELECT
    O.id,
    O.label,
    A.name
FROM
    organizations O
JOIN activities_area A JOIN assoc_organization_activities S ON
    O.identifier = S.organization_id AND A.identifier = S.activities_area_id
ORDER BY
    O.label

我想用SQLAlchemy做到:

^{pr2}$

但这给了我一个错误:

InvalidRequestError: Could not find a FROM clause to join from. Tried joining to <class 'model.model.Activities'>, but got: Can't find any foreign key relationships between 'organizations' and 'activities_area'.

表AssocOrganizationsActivities只有3个字段:id、作为外键的组织的id和作为外键的活动区域的id。因此,表组织和活动都是通过AssocOrganizationsActivities链接起来的。在

如何让它工作?在


Tags: tofromidmodelmysqlareafindlabel
1条回答
网友
1楼 · 发布于 2024-05-13 20:35:12

交换连接的顺序。原始SQL和查询都受到相同的影响,因此:

organizations_query = session.query(O.id, ...) \    
    .join(S) \
    .join(A) \
    ...

您要添加的WHERE子句

^{pr2}$

看起来您正在尝试使用pre-ANSI-join语法,但与ANSI-join混合使用。它们完全是多余的,因为SQLAlchemy可以根据模型之间的外键关系来推断连接的ON子句。原始SQL的破坏方式与此类似

FROM
    organizations O
JOIN activities_area A JOIN ...

在O和A之间根本没有ON子句,此外,如果不首先加入关联表,就没有明显的方法连接它们。总而言之:

^{4}$

相关问题 更多 >