2013-01-17 35 views
6

मैं एसक्यूएलकेमी लाइब्रेरी के माध्यम से काफी बड़े MySQL डेटाबेस के साथ काम कर रहा हूं, और मुझे प्रति सत्र के आधार पर प्रदर्शन समस्याओं को डीबग करने के लिए MySQL की क्वेरी कैशिंग को बंद करना अच्छा लगेगा। उन्हें दोहराते समय धीमे प्रश्नों को डीबग करना मुश्किल होता है जिसके परिणामस्वरूप बहुत तेजी से निष्पादन होता है। सीएलआई MySQL क्लाइंट के साथ, मैं परिणाम प्राप्त करने के लिए SET SESSION query_cache_type = OFF; निष्पादित कर सकता हूं, और मैं इसे प्रत्येक SQLAlchemy सत्र (जब मैं डिबगिंग कर रहा हूं) पर इसे चलाने के लिए चाहता हूं।SQLAlchemy का उपयोग करते समय MySQL क्वेरी कैश को कैसे बंद करें?

लेकिन मैं यह नहीं समझ सकता कि SQLAlchemy को कॉन्फ़िगर कैसे करें, यह SET SESSION query_cache_type = OFF चलाता है जब यह एक नया डेटाबेस सत्र तत्काल करता है।

मैंने 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 वर्ग खुद को हुक जोड़कर विश्व स्तर पर यह कर सकते हैं, लेकिन (क) आप शायद ताकि आप पिरामिड सेटिंग्स उपलब्ध चाहते हैं वैसे भी तय कर सकते हैं कि हुक जोड़ने के लिए या नहीं, और (बी) वैश्विक स्थिति खराब है :)