mysqldb:2014:Commands out of sync; you can't run this command now

2013年2月5日 | 由 helight | 400字 | 阅读大约需要1分钟 | 归档于 linux 应用 | 标签 #shell #mysql

自己写了一个python的mysql的访问类,在python的多线程种使用种有了点问题,就是报这个2014的错误,在网上搜了很多资料,基本都是说mysqldb有问题,但是在解决方法上我这里测试通过一种方式:

在每次查询或是更新的时候,从新获取一个sql执行结构体cursor,执行完毕之后在close这个cursor,例如在类方法种我这样写:

def do_sql(self, p_sql):
   self.cursor = self.conn.cursor() #这里重新获取

   count = 0
   try:
      count = self.cursor.execute(p_sql) 
   except Exception, e:
     print 'mysql exception: ', e, p_sql 
     self.cursor.close() #异常的时候也关闭

   self.cursor.close() #这里关闭

   return count

这种解决方法可以解决单sql语句的问题,也就是说单个sql语句执行没有问题,但是要是遇到多个sql语句用;来链接起来再执行还是有问题的, 在我的程序种有这种情况,所以我又不得不把我程序种这种语句拆开或是合并成一条语句。

从各种查阅的资料来看,大家都把这种问题的根源指向了mysqldb,是mysqldb底层没有支持到这种操作方式,所以在执行sql语句的时候会抛出异常。