Bạn có thể bắt ngoại lệ OperationalError và kết nối lại.
from MySQLdb import OperationalError
try:
my_sql_operation()
except OperationalError as e:
#do what you want to do on the error
reconnect()
print e
Nếu rõ ràng bạn muốn kiểm tra xem kết nối có bị ngắt trước khi chạy truy vấn hay không, bạn có thể chạy truy vấn thử nghiệm để kiểm tra xem ngoại lệ có xảy ra hay không.
Tôi không chắc trong những trường hợp nào khác OperationalError được nêu ra. Nhưng nếu bạn chỉ muốn bắt MySQL server has gone away
lỗi, bạn có thể làm điều gì đó như thế này.
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()
nó sẽ chỉ bắt lỗi 'đã biến mất' và cho phép các ngoại lệ OperationalError do các lý do khác được nêu ra.
CẬP NHẬT
Như tôi đã nói trong nhận xét, hàm truy vấn của tôi sẽ như thế này:
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)
Đó chỉ là một ví dụ và có thể không phù hợp trong trường hợp của bạn. Điểm tôi đang cố gắng thực hiện là tốt hơn hết nên có các chức năng khác nhau cho những việc khác nhau để bạn có thể xử lý những tình huống này một cách dễ dàng.