最近在帮别人做一个小型的网站(包括web前端),在使用的过程中,出现了以下的bug:
in Execute_SQL cursor = conn.cursor() ,in cursor raise errors.OperationlError (MySQL Connection not available.)
出现这个bug后,只要涉及到数据库方面的处理都会出错。经过一番煞费苦心的查找解决方法时,在这篇文章中找到答案:http://bugs.mysql.com/bug.php?id=67649,解释如下:
Description:上文说如果你打开了一个cursor,但是没有把里面的结果集都read一遍就把它close掉了,后续访问数据库都会失败。
If you open an unbuffered cursor and you do not read the WHOLE result set before closing the cursor, the next query will fail with
File "/usr/lib/python3.2/site-packages/mysql/connector/connection.py", line 1075, in cursor
raise errors.OperationalError("MySQL Connection not available.")
mysql.connector.errors.OperationalError: MySQL Connection not available.
and all subsequent database calls will fail too.
解决方法:
1.在调用cursor.close(),丢弃所有未读的结果
我的解决方法,原代码如下:
def Execute_SQL ( command , var = None , search = True ) :
cursor = conn.cursor ( )
if var is None :
cursor.execute ( command )
else :
cursor.execute ( command , var )
if search :
values = cursor.fetchall ( )
else :
values = cursor.rowcount
conn.commit ( )
cursor.close ( )
return values
改后的代码:
def Execute_SQL ( command , var = None , search = True ) :
cursor = conn.cursor ( )
if var is None :
cursor.execute ( command )
else :
cursor.execute ( command , var )
if search :
values = cursor.fetchall ( )
else :
# values = cursor.rowcount
values = cursor.fetchone();
while values:
print (values);
values = cursor.fetchone();
conn.commit ( )
cursor.close ( )
return values