确保查询得到执行

时间:2013-03-02 12:04:39

标签: python mysql mysql-python

我有一台服务器可正常执行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是一个监视大多数查询失败的函数(不相关)。

1 个答案:

答案 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)