Python SQLAlchemy MySQL直接连接
我的代码目前在SQLAlchemy ORM层中很好地执行查询,如下所示:Python SQLAlchemy MySQL直接连接,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我的代码目前在SQLAlchemy ORM层中很好地执行查询,如下所示: session().query(model_a).join( (model_b, something == somethingelse) ).join( (model_c, something == somethingelse) ) # etc ... 但我遇到了一个需要几分钟才能完成的问题。事实证明MySQL是罪魁祸首,因为它没有按照我们要求的顺序加入。在之后添加直线连接,选择类似: SELECT ST
session().query(model_a).join(
(model_b, something == somethingelse)
).join(
(model_c, something == somethingelse)
) # etc ...
但我遇到了一个需要几分钟才能完成的问题。事实证明MySQL是罪魁祸首,因为它没有按照我们要求的顺序加入。在之后添加直线连接
,选择类似:
SELECT STRAIGHT_JOIN table_a.id FROM table_a INNER JOIN table_b ...
解决了这个问题,但我不知道是否有办法让SQLAlchemy在选择之后添加直接连接。文档建议可以通过with\u hint(表a,“直接连接”)
将提示添加到select()
,但这会将文本添加到错误的位置,从而导致MySQL语法错误。这还需要跳出ORM,这是不理想的
我尝试过使用各种MySQL调试技术,如EXPLAIN
,ANALYZE TABLE
等。。。但似乎无法找到MySQL选择错误路径的原因。手动切换连接顺序似乎也没有什么帮助,所以我现在需要直接连接到工作中
有什么想法吗?我们直接支持MySQL及其奇怪的关键字:
session().query(model_a).prefix_with("STRAIGHT_JOIN").join(
(model_b, something == somethingelse)
).join(
(model_c, something == somethingelse)
) # etc ...