python 数据库游标(cursor)超时释放

想实现个功能,当判断数据库存储数据完成后,对数据库中数据进行操作,于是写了个循环等待的while

    while 1:
        cmd = "SELECT * FROM tb where "\
            " flag=\"%s\" and insert_day=\"%s\"" \
                % ("done", timeflag)      # done是存储完成标识
        cursor.execute(cmd)
        sql = cursor.fetchall()
        if len(sql) != 0:
        	break
        else:
        	time.sleep(300)

发现sleep 5min后程序失败

原因:在程序最前面进行的数据库连接

db = MySQLdb.connect("ip", "用户名", "密码",  "数据库名", 数据库端口, charset='utf8' )
cursor = db.cursor()

此时连接已释放

然后发现数据库这里其实可以配置超时

MySQLdb.connect(host=host, port=port, user=user,passwd=passwd, connect_timeout=2, read_timeout=5, charset="utf8")

但是因为我的等待时间不确定,因此这里不适合用配置超时来修复

修复方式:
每次使用游标前进行数据库是否连接判断,若已释放,重新连接

    try:
        db.ping()
        print "link success"
    except:
        print "link again"
        db = MySQLdb.connect("ip", "用户名", "密码",  "数据库名", 数据库端口, charset='utf8'  )
        cursor = db.cursor()

你可能感兴趣的:(偶发遇到的一些小点,数据库,python)