आप ऑपरेशनल एरर अपवाद को पकड़ सकते हैं और पुनः कनेक्ट कर सकते हैं।
from MySQLdb import OperationalError
try:
my_sql_operation()
except OperationalError as e:
#do what you want to do on the error
reconnect()
print e
यदि आप स्पष्ट रूप से जांचना चाहते हैं कि क्वेरी चलाने से पहले कनेक्शन चला गया है या नहीं, तो आप यह जांचने के लिए एक परीक्षण क्वेरी चला सकते हैं कि क्या अपवाद होता है।
मुझे यकीन नहीं है कि किन अन्य मामलों में ऑपरेशनल एरर उठाया गया है। लेकिन अगर आप केवल MySQL server has gone away
को पकड़ना चाहते हैं त्रुटि, आप ऐसा कुछ कर सकते हैं।
from MySQLdb import OperationalError
try:
my_sql_operation()
except OperationalError as e:
if 'MySQL server has gone away' in str(e):
#do what you want to do on the error
reconnect()
print e
else:
raise e()
यह केवल 'चले गए' त्रुटि को पकड़ लेगा और अन्य कारणों से उठाए गए ऑपरेशनल एरर अपवादों को उठाया जाएगा।
अपडेट करें
जैसा कि मैंने टिप्पणी में कहा था, मेरा क्वेरी करने का कार्य इस प्रकार होगा:
def fetch_data(query):
try:
cursor = conn.Cursor()
cursor.execute(query)
return cursor.fetchall()
except OperationalError as e:
reconnect()
print 'reconnecting and trying again...'
fetch_data(query)
यह सिर्फ एक उदाहरण है और आपके मामले में उपयुक्त नहीं हो सकता है। मैं जो बात कहने की कोशिश कर रहा हूं, वह यह है कि अलग-अलग चीजों के लिए अलग-अलग कार्य करना बेहतर है ताकि आप इन स्थितियों को आसानी से संभाल सकें।