2013-01-17 7 views
6

私はSQLAlchemyライブラリを使用してかなり大きなMySQLデータベースを扱っています。セッションごとにパフォーマンスの問題をデバッグするために、MySQLのクエリキャッシュを無効にしたいと思います。遅いクエリを繰り返すと、実行速度が大幅に向上します。 CLI MySQLクライアントでは、私が探している結果を得るためにSET SESSION query_cache_type = OFF;を実行することができます。これは、(デバッグしているときに)すべてのSQLAlchemyセッションで実行したいと思います。SQLAlchemyの使用中にMySQLクエリキャッシュをオフにする方法はありますか?

しかし、新しいデータベースセッションをインスタンス化するときにSET SESSION query_cache_type = OFFを実行するようにSQLAlchemyを構成する方法を理解できません。

私はEngine and Connection docsを見ましたが、何も見つかりませんでした。

私には分かりませんが、これを行うには良い方法がありますか?

+0

http://stackoverflow.com/a/15788051/497208は役に立ちます –

答えて

5

、あなたのエンジンを定義した直後に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)グローバル状態が悪い:

関連する問題