MySQLdb连接问题

时间:2009-12-29 02:05:49

标签: python mysql

我正在编写一个通过查询MySQL数据库提供服务的服务器。 一切都很顺利,除非运行一两天连接将消失。 错误代码是(2600,MySQL已经消失)

我尝试通过以下方式包装游标对象:

def cursor(self):    
    try:
        return self.connection.cursor()
    except:
        self.connection = MySQLdb.connect(**self.kwargs)
        return self.connection.cursor()

这似乎不起作用,当我调用cursor.execute(..)时,我从这个包装类的光标仍然出错。

我知道我可以保持一致的连接吗?

2 个答案:

答案 0 :(得分:2)

@ duffymo关于不保持连接打开时间过长的想法是可行的,但是关于捕获异常和重试的原始想法也是如此(我不太确定哪个更好)。

由于cursor.execute引发了异常,因此您必须捕获并修复它(通过更新连接和游标并重复执行尝试)。我会通过一个简单的类包装器,保持连接(以及建立或重新建立它所需的参数)和游标作为成员,并公开执行和获取的方法。

请注意,通过以这种方式封装连接和游标,您可以保持完全相同的接口(具有完全不同的实现,从池中获取连接并在完成后将其返回到那里),如果您执行< / em>决定切换到@ duffymo的策略(显式方法“完成从此execute获取”将有所帮助; - )。

答案 1 :(得分:1)

连接池可以更好地为您提供服务,并最大限度地缩短连接保持打开的时间。它将更具可扩展性,您不会遇到这个问题。