Py学习  »  DATABASE

将Pandas数据帧编码到MySQL的UTF-8

Jonathan • 5 年前 • 2634 次点击  

我正在使用Pandas、MySQL和SQLAlchemy。

我正在使用pandas.to_sql()将包含非ASCII文本的pandas数据帧提交到MySQL数据库。注意,对于我使用过的其他数据帧,我的过程工作得很好

但是,对于非ascii文本,以下调用会引发错误:

df.to_sql(
        name='tableOne',
        con=engine,
        index=False,
        if_exists='replace')

结果错误(最后一行):

UnicodeEncodeError: 'ascii' codec can't encode character '\xe5' in position 143: ordinal not in range(128)

在阅读了类似的文章之后,我发现答案是在引擎中指定“utf8”,如下所示:

engine = create_engine(f'mysql+mysqldb://{MYSQL_USER}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset=utf8', encoding="utf8")

我已经尝试了我能想到的一切,我能在网上找到的一切。我把我的引擎改成包括所有的“utf8”、“utf-8”等。我试过手动将DF的每个文本列编码为utf-8。这些都不管用

我已经完成了以下其他类似的SO帖子,这些帖子似乎有类似的问题,因此也有类似的解决方案,但是没有什么对我有效:

Another UnicodeEncodeError when using pandas method to_sql with MySQL

How to handle encoding in Python 2.7 and SQLAlchemy 🏴‍☠️

How do I get SQLAlchemy to correctly insert a unicode ellipsis into a mySQL table?

convert pandas dataframe to utf8

谢谢你的帮助!

编辑:fixed brainfart:'Unicode'->'ascii'

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51577
 
2634 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Rick James
Reply   •   1 楼
Rick James    6 年前

e5 不是ascii,也不是UTF-8。与 CHARACTER SET latin1 它是 Ã¥ ;这有道理吗?所以,我建议您有两个错误:一个地方要求ascii,一个提供latin1,还有一个要求utf8。

然而,正如@lenz指出的, E5 也可以是CJK字符的第一个字节。由于错误消息正在查找ascii,因此它只显示第一个有问题的字节。看到接下来的两个字节将证实这一点。

我想你失踪了 use_unicode=True .

python 熊猫在那一页的后面写下了笔记。