2013-01-17 8 views
6

Sto lavorando con un database MySQL abbastanza grande tramite la libreria SQLAlchemy e mi piacerebbe disattivare il caching delle query di MySQL per eseguire il debug dei problemi di prestazioni per ogni sessione. È difficile eseguire il debug delle query lente quando la loro ripetizione comporta un'esecuzione molto più rapida. Con il client CLI MySQL, posso eseguire SET SESSION query_cache_type = OFF; per ottenere il risultato che sto cercando e vorrei eseguirlo su ogni sessione SQLAlchemy (quando eseguo il debug).Come disattivare la cache di query MySQL durante l'utilizzo di SQLAlchemy?

Ma non riesco a capire come configurare SQLAlchemy in modo che venga eseguito SET SESSION query_cache_type = OFF quando crea una nuova sessione di database.

Ho guardato il Engine and Connection docs, ma non riesco a trovare nulla.

C'è qualcosa di ovvio che mi manca, o un modo migliore di farlo?

+0

http://stackoverflow.com/a/15788051/497208 può essere utile –

risposta

5

Utilizzare un event hook subito dopo aver definito il vostro motore:

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) 

Si può fare questo a livello globale con l'aggiunta del gancio alla classe Pool in sé, ma (a) probabilmente si desidera che le impostazioni della piramide disponibili in ogni caso in modo da può decidere se aggiungere o meno il gancio e (b) lo stato globale è negativo :)