我正在通过SQLAlchemy库使用相当大的MySQL数据库,我很想关闭MySQL的查询缓存来调试每个会话的性能问题。调用慢速查询时很难调试它们,从而加快执行速度。使用CLI MySQL客户端,我可以执行SET SESSION query_cache_type = OFF;
来实现我正在寻找的结果,并且我想在每个SQLAlchemy会话上运行它(当我正在调试时)。
但我无法弄清楚如何配置SQLAlchemy,使其在实例化新数据库会话时运行SET SESSION query_cache_type = OFF
。
我看过Engine and Connection docs,但似乎找不到任何东西。
有什么明显的东西我缺失了,还是更好的方法呢?
答案 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)全球状态不好:)