Tôi đã giải quyết vấn đề này bằng cách tạo một hàm bao bọc cursor.execute()
vì đó là thứ đang ném ra MySQLdb.OperationalError
ngoại lệ. Ví dụ khác ở trên ngụ ý rằng đó là conn.cursor()
phương thức ném ngoại lệ này.
import MySQLdb
class DB:
conn = None
def connect(self):
self.conn = MySQLdb.connect()
def query(self, sql):
try:
cursor = self.conn.cursor()
cursor.execute(sql)
except (AttributeError, MySQLdb.OperationalError):
self.connect()
cursor = self.conn.cursor()
cursor.execute(sql)
return cursor
db = DB()
sql = "SELECT * FROM foo"
cur = db.query(sql)
# wait a long time for the Mysql connection to timeout
cur = db.query(sql)
# still works