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

时间:2013-01-17 05:32:58

标签: python mysql sqlalchemy pyramid

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

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

我看过Engine and Connection docs,但似乎找不到任何东西。

有什么明显的东西我缺失了,还是更好的方法呢?

1 个答案:

答案 0 :(得分:6)

定义引擎后立即使用event hook

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)

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