如何在使用SQLAlchemy时关闭MySQL查询缓存?

Kev*_*ins 6 python mysql sqlalchemy pyramid

我正在通过SQLAlchemy库使用相当大的MySQL数据库,我很想关闭MySQL的查询缓存来调试每个会话的性能问题.调用慢速查询时很难调试它们,从而加快执行速度.使用CLI MySQL客户端,我可以执行SET SESSION query_cache_type = OFF;以实现我正在寻找的结果,并且我想在每个SQLAlchemy会话上运行它(当我正在调试时).

但我无法弄清楚如何配置SQLAlchemy,使其SET SESSION query_cache_type = OFF在实例化新的数据库会话时运行.

我看过引擎和连接文档,但似乎找不到任何东西.

有什么明显的东西我缺少,或者更好的方法吗?

Eev*_*vee 6

定义引擎后立即使用事件挂钩:

from sqlalchemy import event

def disable_query_cache(conn, record):
    conn.cursor().execute("SET SESSION query_cache_type = OFF")


# this is probably in your Pyramid setup code
engine = create_engine(...)

if DEBUGGING:
    event.listen(engine, 'connect', disable_query_cache)
Run Code Online (Sandbox Code Playgroud)

您可以通过向Pool类本身添加钩子来全局执行此操作,但是(a)您可能希望金字塔设置仍然可用,以便您可以决定是否添加钩子,以及(b)全局状态是坏的:)