Можете да хванете изключението OperationalError и да се свържете отново.
from MySQLdb import OperationalError
try:
my_sql_operation()
except OperationalError as e:
#do what you want to do on the error
reconnect()
print e
Ако изрично искате да проверите дали връзката е изчезнала, преди да стартирате заявки, можете да изпълните тестова заявка, за да проверите дали възниква изключението.
Не съм сигурен в какви други случаи се повдига OperationalError. Но ако искате да хванете само 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()
ще улови само грешката „изчезнала“ и ще позволи изключенията OperationalError, повдигнати поради други причини, да бъдат повдигнати.
АКТУАЛИЗИРАНЕ
Както казах в коментара, моята функция за заявка ще бъде следната:
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)
Това е само пример и може да не е подходящ за вашия случай. Опитвам се да кажа, че е по-добре да има различни функции за различни неща, за да можете лесно да се справите с тези ситуации.