解决cursor.rowcount返回值类型问题

使用MHA包,对数据库super_read_only变量赋值的时候,发现cursor.rowcount代码返回的类型在两台服务器上不一样,下面具体做了分析和实验。
下面是MHA里的一部分代码,主要看try里面的部分即可,其实是连库执行sql的过程。

def execute_update(self, query, expected_affected_rows, bind_args):
    params = []
    status = {}
    if bind_args:
        params.extend(bind_args)
    try:
        cursor = self.conn.cursor()
        cursor.execute(query, params)
        rows = cursor.rowcount
        print "0000000", rows, status, type(rows)
        status[Status] = rows
        # rows is not and integer or rows != expect rows
        if (not isinstance(rows, int)) or rows != expected_affected_rows:
            status[Status] = -1
        print "1111", status, expected_affected_rows, isinstance(rows, int), type(rows), rows != expected_affected_rows
    except mysql.connector.Error, err:
        status[Errstr] = err.msg

    return status

调用这部分代码,比较在两台服务器上分别打印 “0000000” 行的类型结果,发现返回值都是0,但是一个是int类型的0,一个是long类型的0,类型不同,对后面的逻辑判断是有影响的。

if __name__ == "__main__":
    d = DBHelper()
    query = '/*!50708 SET GLOBAL super_read_only=0 */'
    d.connect("10.10.10.66", 3306, "root", 'pwd')
    status = d.execute_update(query, 0, None)
    print status

最后通过多次实验和比较,结论如下:
1.跟操作系统Centos6.5 和 Centos7.4 没关系
2.跟mysql_connector_python-2.1.3 版本没有关系
3.跟python的版本有关系
python2.7.5 返回 long
python2.6.6 返回 int
python2.7.10 返回 int

最终结论:
跟操作系统、Mysql版本、python版本无关,只跟 mysql-connector-python版本有关系,8.0.22版本的返回值是long类型
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值