python 数据库游标(cursor)超时释放
想实现个功能,当判断数据库存储数据完成后,对数据库中数据进行操作,于是写了个循环等待的whilewhile 1:cmd = "SELECT * FROM tb where "\" flag=\"%s\" and insert_day=\"%s\"" \% ("done", timeflag)# done是存储完成标识cursor.execute(cmd)sql = curs
·
想实现个功能,当判断数据库存储数据完成后,对数据库中数据进行操作,于是写了个循环等待的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()
更多推荐


所有评论(0)