2013-01-17 23 views
6

SQLAlchemy kütüphanesi aracılığıyla oldukça büyük bir MySQL veritabanı ile çalışıyorum ve performans sorunlarını hataya ayıklamak için MySQL'in sorgu önbelleğini devre dışı bırakmak istiyorum. Onları tekrarlarken yavaş sorgularda hata ayıklamak çok daha hızlı yürütmeye neden olur. CLI MySQL istemcisiyle, aradığım sonucu elde etmek için SET SESSION query_cache_type = OFF; dosyasını çalıştırabilirim ve bunu her SQLAlchemy oturumunda çalıştırmak istiyorum (hata ayıklarken).SQLAlchemy kullanırken MySQL sorgu önbelleğini nasıl kapatabilirim?

SQLAlchemy'yi, yeni bir veritabanı oturumu başlattığında SET SESSION query_cache_type = OFF çalıştıracak şekilde nasıl yapılandıracağını anlayamıyorum.

Engine and Connection docs ürününe baktım ama bir şey bulamadık galiba.

Eksik olduğum belli bir şey var mı, yoksa bunu yapmanın daha iyi bir yolu var mı?

+0

http://stackoverflow.com/a/15788051/497208 yararlı olabilir –

cevap

5

kullanın bir event hook Eğer motor tanımlamak hemen sonra:

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) 

Sen Pool sınıfa kendisine kancayı ekleyerek global olarak yapabiliriz, ama (a) muhtemelen sizin bu yüzden zaten mevcut Piramit ayarlarını istediğiniz kanca ekleyip eklemeyeceğinize karar verebilir ve (b) küresel durum kötü olabilir :)