前言
长话短说,之前在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
升级版本:文章来源:https://www.toymoban.com/news/detail-634323.html
pip install --upgrade PyMySQL==1.0.2
升级完成后,脚本直接迁移过来,正常运行;
版本的坑是真坑;文章来源地址https://www.toymoban.com/news/detail-634323.html
到了这里,关于PyMySQL库版本引起的python执行sql编码错误的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!