我正在使用Pandas,MySQL和SQLAlchemy。
我目前正在使用pandas.to_sql()将我的熊猫DataFrame (包含非ASCII文本)提交到我的MySQL数据库。请注意,对于我使用过的其他DataFrames,我的过程工作得很好
但是,对于非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")我已经尝试了所有我能想到的和我能在网上找到的一切。我改变了我的引擎,包括‘UTF 8’,' UTF-8‘等的每一个组合。我尝试手动编码我的DF的每一个文本列到UTF-8。这些都没有用。
我已经处理了以下其他类似的帖子,这些帖子似乎有类似的问题,因此也有类似的解决方案,但对我来说没有什么效果:
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
谢谢你的帮助!
编辑:固定脑图:'Unicode‘-> 'ascii’
发布于 2019-02-07 02:16:28
e5不是ascii,也不是UTF-8.对于CHARACTER SET latin1,这就是å;这有意义吗?因此,我建议您有两个错误:一个是请求ascii,一个是提供latin1,另一个是期望utf8。
但是,正如@lenz所指出的,E5也可能是CJK字符的第一个字节。由于正在查找ascii,错误消息只显示第一个违规字节。看到接下来的两个字节将证实这一点。
我想你很想念use_unicode=True。
请参阅http://mysql.rjweb.org/doc.php/charcoll#python和Panda在这一页下的注释。
https://stackoverflow.com/questions/54563008
复制相似问题