我正在编写一个通过查询MySQL数据库提供服务的服务器。 一切都很顺利,除非运行一两天连接将消失。 错误代码是(2600,MySQL已经消失)
我尝试通过以下方式包装游标对象:
def cursor(self):
try:
return self.connection.cursor()
except:
self.connection = MySQLdb.connect(**self.kwargs)
return self.connection.cursor()
这似乎不起作用,当我调用cursor.execute(..)时,我从这个包装类的光标仍然出错。
我知道我可以保持一致的连接吗?
答案 0 :(得分:2)
由于cursor.execute
引发了异常,因此您必须捕获并修复它(通过更新连接和游标并重复执行尝试)。我会通过一个简单的类包装器,保持连接(以及建立或重新建立它所需的参数)和游标作为成员,并公开执行和获取的方法。
请注意,通过以这种方式封装连接和游标,您可以保持完全相同的接口(具有完全不同的实现,从池中获取连接并在完成后将其返回到那里),如果您执行< / em>决定切换到@ duffymo的策略(显式方法“完成从此execute
获取”将有所帮助; - )。
答案 1 :(得分:1)
连接池可以更好地为您提供服务,并最大限度地缩短连接保持打开的时间。它将更具可扩展性,您不会遇到这个问题。