我有一台服务器可正常执行9/10次,但有时我会收到错误“查询期间与MySQL服务器的连接失败”然后整个过程停止/冻结。
我试图让MySQL查询再次执行,如果它使用了一个函数失败,不幸的是,每当我收到错误时,代码“停止”或卡住。我做错了吗?
这里的字符串类似于:SELECT xx FROM xxx WHERE xxx
try:
db = MySQLdb.connect (host = "",
user = "",
passwd = "",
db = "" )
except MySQLdb.Error, e:
print("Error %d: %s" %(e.args[0], e.args[1]))
sys.exit(1);
cursor = db.cursor()
def mysql_handling(string):
while 1:
try:
cursor.execute(string)
if 'SELECT' not in string:
db.commit()
break
except:
mysql_error_tracking(string)
mysql_error_tracking
是一个监视大多数查询失败的函数(不相关)。
答案 0 :(得分:0)
为您的连接方法添加超时:
db = MySQLdb.connect (host = HOST, user = USER, passwd = PASS, db = DB,
connect_timeout = TIMEOUT)
在except
块中执行此操作,以便重新连接。
为了让您的生活更轻松,请将连接代码放在单独的功能中,以便重复使用。像这样(未经测试):
def get_cursor()
try:
db = MySQLdb.connect (host = HOST, user = USER, passwd = PASS, db = DB,
connect_timeout = TIMEOUT)
except MySQLdb.Error, e:
print("Error %d: %s" %(e.args[0], e.args[1]))
sys.exit(1);
return db.cursor()
def mysql_handling(cursor, string):
while True:
try:
cursor.execute(string)
if 'SELECT' not in string:
db.commit()
break
except MySQLdb.MySQLError:
cursor.close()
mysql_error_tracking(string)
cursor = get_cursor()
def main():
mysql_handling(get_cursor(), string)