Isa*_*aac 4 python mysql pandas
我几天前在堆栈溢出上发布了一个类似的问题(已经解决了),我不确定这里的礼仪是什么,但我正在发一个新帖子.
基本上,当我尝试将pandas DataFrame写入MySQL数据库时,我得到一个UnicodeEncodeError.我可以使用以下代码重现错误:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('mysql://root:@localhost/testdb')
df = pd.DataFrame([[u'\u2013',2],['e',4]], index = ['a','b'], columns = ['c','d'])
df.to_sql('data', engine, if_exists = 'replace', index = False)
Run Code Online (Sandbox Code Playgroud)
这是错误:
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' in position 0: ordinal not in range(256)
Run Code Online (Sandbox Code Playgroud)
这是追溯的最后一个相关行:
C:\Anaconda\lib\site-packages\sqlalchemy\dialects\mysql\mysqldb.pyc in do_executemany(self, cursor, statement, parameters, context)
93
94 def do_executemany(self, cursor, statement, parameters, context=None):
---> 95 rowcount = cursor.executemany(statement, parameters)
96 if context is not None:
97 context._rowcount = rowcount
Run Code Online (Sandbox Code Playgroud)
当我之前遇到此问题时,这是由于pandas.io.sql中的一个错误,修复程序是更改几行代码.这工作正常,直到我遇到拉丁-1编解码器范围之外的字符.
你们有什么建议吗?
好吧,在发布我的问题后的一个小时内,我已经弄明白了.也许我应该在发布之前做更多的研究.
问题是sqlalchemy需要配置为使用utf-8编码.上面代码中的解决方案是将第3行更改为:
engine = create_engine('mysql://root:@localhost/testdb?charset=utf8', encoding = 'utf-8')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2857 次 |
| 最近记录: |