2013-01-17 5 views
6

Ich arbeite mit einer ziemlich großen MySQL-Datenbank über die SQLAlchemy-Bibliothek, und ich würde gerne MySQL Query Caching deaktivieren, um Leistungsprobleme pro Sitzung zu debuggen. Es ist schwierig, langsame Abfragen zu debuggen, wenn sie wiederholt werden, was zu einer viel schnelleren Ausführung führt. Mit dem CLI-MySQL-Client kann ich SET SESSION query_cache_type = OFF; ausführen, um das Ergebnis zu erreichen, das ich suche, und ich möchte dies bei jeder SQLAlchemy-Sitzung ausführen (wenn ich debugge).Wie kann ich den MySQL Query Cache bei Verwendung von SQLAlchemy ausschalten?

Aber ich kann nicht herausfinden, wie SQLAlchemy so konfigurieren, dass es SET SESSION query_cache_type = OFF ausgeführt wird, wenn es eine neue Datenbanksitzung instanziiert.

Ich habe mir die Engine and Connection docs angesehen, kann aber nichts finden.

Gibt es etwas offensichtlich, dass ich vermisse, oder eine bessere Möglichkeit, dies zu tun?

+0

http://StackOverflow.com/a/15788051/497208 kann nützlich sein –

Antwort

5

Verwenden Sie ein event hook sofort nach definieren Sie den Motor:

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) 

Sie können dies global tun, indem Sie den Haken an der Pool Klasse Zugabe selbst, sondern (a) Sie wollen wahrscheinlich die Pyramide Einstellungen zur Verfügung sowieso, so dass Sie kann entscheiden, ob der Haken hinzugefügt werden soll oder nicht, und (b) der globale Zustand ist schlecht :)