我正在尝试使用查询 API 创建带有 MAX_EXECUTION_TIME(30000) 提示的 MySQL 查询。
我的代码大致是:
from flask_sqlalchemy import SQLAlchemy
class MyTable(SQLAlchemy().Model):
...
base_query = Sqlalchemy.session.query(MyTable) # This works when I execute it.
base_query_with_hint = base_query.with_hint(MyTable, "MAX_EXECUTION_TIME(30000)")
base_query_with_hint.execute() # THIS DOES NOT WORK.
str(base_query_with_hint)
# Output
# Select a, b, c from MyTable MAX_EXECUTION_TIME(30000)
显然,提示只是在查询结束时呈现!
它应该呈现为
Select /*+ MAX_EXECUTION_TIME(30000) */ a, b, c from MyTable
我希望它的行为完全一样https://docs.sqlalchemy.org/en/13/core/selectable.html#sqlalchemy.sql.expression.Select.with_hint https://docs.sqlalchemy.org/en/13/core/selectable.html#sqlalchemy.sql.expression.Select.with_hint但我使用的是查询 API,而不是选择 API。
简而言之,使用prefix_with()
反而。
这是 MySQL 5.7 优化器提示的类似示例SQLAlchemy 文档 https://docs.sqlalchemy.org/en/13/core/selectable.html#sqlalchemy.sql.expression.Select.prefix_with,在 Python 交互式提示符下运行:
>>> from sqlalchemy.sql import select, table
>>> from sqlalchemy.dialects import mysql
>>> tbl = table('my_table')
>>> # MySQL 5.7 optimizer hints
>>> stmt = select([tbl]).prefix_with(
... "/*+ MAX_EXECUTION_TIME(1000) */", dialect="mysql")
>>> print(stmt.compile(dialect=mysql.dialect()))
SELECT /*+ MAX_EXECUTION_TIME(1000) */
FROM my_table
>>>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)