python 导入 mysql 输入中文数据报错解决

该博客介绍了如何在Python3环境下使用pymysql和sqlalchemy库连接MySQL数据库,并确保数据库和数据表的字符集为UTF8MB4。详细步骤包括创建数据库、设置数据库字符集、修改已有数据库字符集以及将DataFrame数据写入数据库。此外,还提供了解决单元格数据长度超出限制的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

针对python3用户

先导入包,创建连接方式时的charset为utf8bm4

import pymysql
from pymysql import *
from sqlalchemy import create_engine

# 创建连接
conn = pymysql.connect(host='localhost',user='XXX',password='XXX',charset='utf8mb4') 

# 创建游标
cursor = conn.cursor()

如果还没建库:
建库的时候设置库读取数据的编码为uft8

# 创建数据库的sql(如果数据库存在就不创建,防止异常)
# set utf8 和python中文字符编译代码相同
sql = "CREATE DATABASE IF NOT EXISTS 数据库名 character set utf8;" 

# 执行创建数据库的sql
cursor.execute(sql)

如果已经建库:

sql_1='alter database 数据库名 character set utf8;'
cursor.execute(sql_1)

然后再写入数据,这里用dataframe举例:
首先设置引擎读取数据编码格式为utf8,不可为utf8bm4,否则会全盘报错。

# 创建引擎
yconnect = create_engine('mysql+pymysql://用户名:密码@localhost:端口/数据库名?charset=utf8')
# 写入数据
df.to_sql('表名', yconnect, schema='数据库名', if_exists='replace')

然后就导入成功了。

Ps: 建议在建库后再运行以下代码解决单元格输入数据长度超限的问题,当然你数据条都很短的话直接无视就好。

# fix: 1406, "Data too long for column
sql_2 ='SET @@global.sql_mode= "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";'
cursor.execute(sql_2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值