Du kan fånga OperationalError-undantaget och återansluta.
from MySQLdb import OperationalError
try:
my_sql_operation()
except OperationalError as e:
#do what you want to do on the error
reconnect()
print e
Om du uttryckligen vill kontrollera om anslutningen är borta innan du kör frågor, kan du köra en testfråga för att kontrollera om undantaget inträffar.
Jag är inte säker på i vilka andra fall OperationalError uppstår. Men om du vill fånga bara MySQL server has gone away
fel kan du göra något liknande.
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()
det kommer bara att fånga felet "borta bort" och låta OperationalError-undantag som uppstår på grund av andra skäl tas upp.
UPPDATERA
Som jag sa i kommentaren skulle min frågefunktion vara så här:
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)
Det är bara ett exempel och kanske inte passar i ditt fall. Poängen jag försöker få fram är att det är bättre att ha olika funktioner för olika saker så att du enkelt kan hantera dessa situationer.