Python 基础教程

Python 高级教程

Python 相关应用

Python 笔记

Python FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/python-pymysql-UnicodeEncodeError-latin-1.html

python pymysql 操作数据库报错 UnicodeEncodeError: 'latin-1' codec can't encode characters in position 2-5: ordinal not in range(256)

Python 笔记 Python 笔记


python 中,使用 pymysql 对表进行增改删等变更操作时,报错 UnicodeEncodeError: 'latin-1' codec can't encode characters in position 2-5: ordinal not in range(256),原因及解决方法?

原因及解决方法

原因

操作表的字段里面有 utf8utf8mb4 等非 latin-1 的编码方式,pymysql 默认对数据库采用 latin-1 的编码形式。

解决方法

如果没有用连接池,需要创建连接对象时需要指定相应 db 操作的 charset 参数为实际的编码方式:

import pymysql

def connect_db():
    return pymysql.connect(
        host='x.x.x.x',
        port=3306,
        user='xxxx',
        password='xxx',
        database='xx',
        charset='utf8'
    )

如果使用诸如 DBUtils 的连接池,示例如下:

import pymysql

from DBUtils.PooledDB import PooledDB

def connect_db():
    pool = PooledDB(pymysql, mincached=5, maxcached=10, maxconnections=50,
                    host='x.x.x.x', user='xxxx', passwd='xxx',
                    port=3306, db='xx', charset='utf8')
    return pool.connection()

 

python 通过 pymysql 连接操作 mysql 库时,出现 UnicodeEncodeError: 'latin-1' codec ...
python 使用 geohash 时,报错 ModuleNotFoundError: No module named 'geohash', ...
在基于 spring boot 的项目中,使用 spring cron 做定时/定频任务设置时,服务启动时报错 'Incrementer d ...
python 中,通过 pymysql 操作数据库时,报 raise err.InterfaceError("(0, '')") 错误的原因 ...
Python中关键字in主要有2中用法: ...