Python 基础教程

Python 高级教程

Python 相关应用

Python 笔记

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()