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

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

你可能感兴趣的:(故障排查,python,sql,开发语言)