我正在使用声明性的_base(),并试图找出在使用多对多关系时如何强制执行延迟内部联接。在
我在MySQL和InnoDB中有定义了外键约束的表。在
users: userid, name
permissions: permissionid, name
users_permissions: userid, permissionid
我正在使用metadata.reflect()
来加载我的数据库。在
只要我选择
u = Session().query(User).filter(User.name == 'myuser').first()
u.permissions
服务器接收到的查询:
SELECT permissions.permissionid AS permissions_permissionid,
permissions.name AS permissions_name
FROM permissions, users_permissions
WHERE ? = users_permissions.userid
AND permissions.permissionid = users_permissions.permissionid
ORDER BY permissions.name
如我们所见,FROM permissions, users_permissions
不是内部联接。我可以在不使用lazy=False
的情况下强制执行此操作,因为如果我这样做,级联效果将是加载太多信息,因为permissions
也与另一个表(示例中未提及)相关,users
也与其他表相关(同样,在示例中未提及)。我想对我所有的类使用相同的关系模板。在
编辑:CONTEXT我正在尝试复制所有的SQL查询,以匹配当前系统中的查询。我正在尝试从oursql
迁移到sqlalchemy orm
。在
MySQL正在执行内部联接;也就是说,您所显示的查询是内部联接的一个实现。在
从docs:
关键点是inner join vs. outer join。语法无关。在
请注意,可以使用
inner join
语法形式将查询转换为查询,该语法形式具有完全相同的含义:MySQL通常会为这两个表单生成相同的执行计划。在
相关问题 更多 >
编程相关推荐