Pandas: to_sql UnicodeEncodeError

创建于 2015-09-01  ·  3评论  ·  资料来源: pandas-dev/pandas

将数据帧写入 sql 会产生 UnicodeEncodeError,即使 sys.defaultencoding 设置为“utf-8”并且 mysql 数据库也使用 utf-8 作为默认排序规则。 有任何想法吗? 谢谢!

在 [6]: df1.to_sql(name='webshoptracks2', con=engine)

UnicodeEncodeError 回溯(最近一次调用最后一次)
()
----> 1 df1.to_sql(name='webshoptracks2', con=engine)

C:\Python27\lib\site-packages\pandas\core\generic.pyc in to_sql(self, name, con,
风味、架构、if_exists、索引、索引标签、块大小、数据类型)
980自我,名称,骗局,风味=风味,模式=模式,if_exists=if_
存在,
981 索引=索引,索引标签=索引标签,块大小=块大小,
--> 982 dtype=dtype)
983
984 def to_pickle(自我,路径):

C:\Python27\lib\site-packages\pandas\io\sql.pyc in to_sql(frame, name, con, flav
或者,模式、if_exists、索引、index_label、chunksize、dtype)
第547话
第548话
--> 549 chunksize=chunksize, dtype=dtype)
550
551

C:\Python27\lib\site-packages\pandas\io\sql.pyc in to_sql(self, frame, name, if_
存在、索引、索引标签、架构、块大小、数据类型)
第 1186 章
第1187章
-> 1188 table.insert(chunksize)
1189 # 检查潜在的大小写敏感问题(GH7815)
第1190回
a.架构):

C:\Python27\lib\site-packages\pandas\io\sql.pyc in insert(self, chunksize)
726
第 727 章
英石])
--> 728 self._execute_insert(conn,keys,chunk_iter)
729
730 def_query_iterator(自我,结果,块大小,列,coerce_float=T
后悔,

C:\Python27\lib\site-packages\pandas\io\sql.pyc in _execute_insert(self, conn, k
眼睛,data_iter)
701 def _execute_insert(self, conn, keys, data_iter):
702 data = [dict((k, v) for k, v in zip(keys, row)) for row in data_
迭代]
--> 703 conn.execute(self.insert_statement(), 数据)
704
705 def插入(自我,块大小=无):

C:\Python27\lib\site-packages\sqlalchemy\engine\base.pyc in execute(self, object
, _multiparams, *_params)
912 类型(对象))
913 其他:
--> 914 返回 meth(self, multiparams, params)
915
916 def _execute_function(self, func, multiparams, params):

C:\Python27\lib\site-packages\sqlalchemy\sql\elements.pyc 在 _execute_on_connect
离子(自我,连接,多参数,参数)
321
322 def _execute_on_connection(self, connection, multiparams, params):
--> 323 返回 connection._execute_clauseelement(self, multiparams, para
多发性硬化症)
324
325 def unique_params(self, _optionaldict, *_kwargs):

C:\Python27\lib\site-packages\sqlalchemy\engine\base.pyc 在 _execute_clauseeleme
nt(self, elem, multiparams, params)
第 1008 章
第1009章
-> 1010compiled_sql,distilled_pa​​rams
第1011章
1012 如果 self._has_events 或 self.engine._has_events:

C:\Python27\lib\site-packages\sqlalchemy\engine\base.pyc in _execute_context(sel
f、方言、构造函数、语句、参数、*args)
1144个参数,
1145 光标,
-> 1146 上下文)
1147
1148 如果 self._has_events 或 self.engine._has_events:

C:\Python27\lib\site-packages\sqlalchemy\engine\base.pyc 在 _handle_dbapi_except
离子(自我,e,语句,参数,游标,上下文)
第1342章
1343 其他:
-> 1344 util.reraise(*exc_info)
1345
1346终于:

C:\Python27\lib\site-packages\sqlalchemy\engine\base.pyc in _execute_context(sel
f、方言、构造函数、语句、参数、*args)
1114声明,
1115个参数,
-> 1116 上下文)
1117 elif 不是参数和 context.no_parameters:
1118 如果 self.dialect._has_events:

C:\Python27\lib\site-packages\sqlalchemy\dialects\mysql\mysqldb.pyc in do_execut
许多(自我,游标,语句,参数,上下文)
93
94 def do_executemany(自我,游标,语句,参数,上下文=无
):
---> 95 rowcount = cursor.executemany(statement, parameters)
96 如果上下文不是无:
97 context._rowcount = rowcount

C:\Python27\lib\site-packages\pymysql\cursors.pyc in executemany(self, query, ar
gs)
第153话
参数,
第154话
--> 155 self._get_db().encoding)
156
157 self.rowcount = sum(self.execute(query, arg) for args in args)

C:\Python27\lib\site-packages\pymysql\cursors.pyc in _do_execute_many(self, pref
ix、值、后缀、参数、max_stmt_length、编码)
第179话
180 如果 PY2:
--> 181 v = v.encode(encoding)
182 其他:
183 v = v.encode(编码,'surrogateescape')

UnicodeEncodeError: 'latin-1' 编解码器无法对位置 433-438 中的字符进行编码:
序号不在范围内(256)

IO SQL

最有用的评论

谢谢! 将 '?charset=utf8' 添加到 create_engine() 调用解决了这个问题。

所有3条评论

您是否也尝试过配置engine对象? 请参阅http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#engine -creation-api

你能提供一个可重现的例子吗? (一个给你这个错误的小数据框)

谢谢! 将 '?charset=utf8' 添加到 create_engine() 调用解决了这个问题。

供将来参考: http :

此页面是否有帮助?
0 / 5 - 0 等级