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()
'gone away'エラーのみをキャッチし、他の理由で発生した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)
これは単なる例であり、あなたの場合には適していない可能性があります。私が言いたいのは、これらの状況に簡単に対処できるように、さまざまなものにさまざまな機能を持たせる方がよいということです。