U kunt de OperationalError-uitzondering opvangen en opnieuw verbinding maken.
from MySQLdb import OperationalError
try:
my_sql_operation()
except OperationalError as e:
#do what you want to do on the error
reconnect()
print e
Als u expliciet wilt controleren of de verbinding is verbroken voordat u query's uitvoert, kunt u een testquery uitvoeren om te controleren of de uitzondering optreedt.
Ik weet niet zeker in welke andere gevallen OperationalError wordt opgeworpen. Maar als u alleen de MySQL server has gone away
fout, kunt u zoiets als dit doen.
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()
het zal alleen de 'gone away'-fout opvangen en OperationalError-uitzonderingen die om andere redenen zijn opgeworpen, laten optreden.
UPDATE
Zoals ik in de opmerking al zei, zou mijn zoekfunctie er als volgt uitzien:
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)
Dat is slechts een voorbeeld en is mogelijk niet geschikt voor in uw geval. Het punt dat ik probeer te maken, is dat het beter is om verschillende functies voor verschillende dingen te hebben, zodat je deze situaties gemakkelijk aankunt.