Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy MySQL直接连接_Python_Mysql_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy MySQL直接连接

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

我的代码目前在SQLAlchemy ORM层中很好地执行查询,如下所示:

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 ...