如何在SQLAlchemy中进行安全(约束)隐式连接? 我考虑一个安全的连接,它受到外键的约束。一个含蓄的,只提到它的目标

如何在SQLAlchemy中进行安全(约束)隐式连接? 我考虑一个安全的连接,它受到外键的约束。一个含蓄的,只提到它的目标,sqlalchemy,Sqlalchemy,在SQLAlchemy中,session.query(User).join(address)可能是约束,也可能不是约束,这取决于SQLAlchemy是否知道用户和地址之间的关系 有时我构造一个复杂的查询,我想确保所有连接都是约束的。我该怎么查呢?如果SQLAlchemy在隐式.join(table)未找到其外键时给我一个异常,我会非常高兴 “复杂查询”示例: session.query(地址别名1).join(用户).join(地址别名2) 对于最后一个连接,一种过于显式的方式是.join(ad

在SQLAlchemy中,
session.query(User).join(address)
可能是约束,也可能不是约束,这取决于SQLAlchemy是否知道用户和地址之间的关系

有时我构造一个复杂的查询,我想确保所有连接都是约束的。我该怎么查呢?如果SQLAlchemy在隐式
.join(table)
未找到其外键时给我一个异常,我会非常高兴

“复杂查询”示例:

session.query(地址别名1).join(用户).join(地址别名2)


对于最后一个连接,一种过于显式的方式是
.join(addr\u alias2,User.addresses)
,但正如我所说的,我需要一种隐式语法,如果失败就会发出声音。


不幸的是,本教程提出了相反的建议,API文档没有明确说明这一点。

您尝试过吗?如果说a.join(b)没有ON子句,它将完全依赖ForeignKey()约束对象来确定连接,否则将引发异常。天哪!我真的不知道我尝试了什么,什么没有。。。但至少我发现了一个文档错误:-P文档/教程听起来像是在任何情况下都完成了连接(并且只有在找到外键时才得到约束)“SQLAlchemy想出了如何连接两个表!连接的ON条件(如所称)是根据我们在本教程开始时放置在addresses表上的ForeignKey对象自动生成的。“-您正在查看哪些文档?您引用的文档:它是否说明抛出异常或以其他方式失败?否–我的问题已经很清楚,我知道join()在找到外键时会构造一个条件!表示“如果没有外键,或者有几个外键,则使用以下[更显式]形式之一时,Query.join()工作得更好:“这意味着如果没有找到外键,它仍然可以工作(通过执行笛卡尔乘积:不打开的连接,甚至交叉连接以跳转某些数据库的安全网).也许你可以提交一些文档补丁。