Saya memecahkan masalah ini dengan membuat fungsi yang membungkus cursor.execute()
metode karena itulah yang melempar MySQLdb.OperationalError
pengecualian. Contoh lain di atas menyiratkan bahwa itu adalah conn.cursor()
metode yang melempar pengecualian ini.
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