使用Flask开发web碰到 MySQL Connection not available

最近在帮别人做一个小型的网站(包括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:
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.
上文说如果你打开了一个cursor,但是没有把里面的结果集都read一遍就把它close掉了,后续访问数据库都会失败。

解决方法:

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值