PyMySQL库版本引起的python执行sql编码错误

前言

长话短说,之前在A主机(centos7.9)上运行的py脚本拿到B主机上(centos7.9)运行报错:

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 265-266: ordinal not in range(256)

两个主机系统、python版本、pip版本都是相同的。但是在B主机执行py脚本时,报错指向的代码就是 sql 语句,sql语句也就是一串字符串啊;

py脚本是定时任务,使用pymysql库连接环境内的mysql执行sql,进行查询或插入;

测试解决

通过搜索报错信息,基本都指向了编码;
1、测试修改系统编码,没用;
2、查看、测试python默认编码,没用;
3、在python代码中添加转码;

sql = "SELECT mno,oper_time,substring_index from jijieie;"
new_sql = sql.encode('utf-8')

然后再调用游标执行sql

cursor_shengchan.execute(new_sql)

但是又出现了其他现象:有的python脚本可以正常运行了,又的还是不行,找不出规律;而且有的 sql语句(字符串)转码后成了字节流(字符串前面带个b),中文显示乱码;

解决

不知道从那里看了一眼版本的问题,突然想到遗漏了一个版本检查:python使用的库的版本;
对比了A、B两个主机上的 PyMySQL 库版本,发现了问题;
A主机上的PyMySQL版本是1.0.2
B主机上的PyMySQL版本是0.7

升级版本:

pip install --upgrade PyMySQL==1.0.2

升级完成后,脚本直接迁移过来,正常运行;
版本的坑是真坑;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值