Pandas: to_sql UnicodeEncodeError

作成日 2015年09月01日  ·  3コメント  ·  ソース: pandas-dev/pandas

sys.defaultencodingが "utf-8"に設定されていて、mysqlデータベースもデフォルトの照合としてutf-8を使用している場合でも、SQLにデータフレームを書き込むとUnicodeEncodeErrorが発生します。 何か案は? ありがとう!

[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、index、index_label、chunksize、dtype)
980自己、名前、詐欺、フレーバー=フレーバー、スキーマ=スキーマ、if_exists = if_
存在する、
981 index = index、index_label = index_label、chunksize = chunksize、
-> 982 dtype = dtype)
983
984 def to_pickle(self、path):

C:\ Python27 \ lib \ site-packages \ pandas \ io \ sql.pyc in to_sql(frame、name、con、flav
または、スキーマ、if_exists、index、index_label、chunksize、dtype)
547 pandas_sql.to_sql(frame、name、if_exists = if_exists、index = index、
548 index_label = index_label、schema = schema、
-> 549チャンクサイズ=チャンクサイズ、dtype = dtype)
550
551

C:\ Python27 \ lib \ site-packages \ pandas \ io \ sql.pyc in to_sql(self、frame、name、if_
存在、インデックス、index_label、スキーマ、チャンクサイズ、dtype)
1186 schema = schema、dtype = dtype)
1187 table.create()
-> 1188 table.insert(chunksize)
1189#大文字と小文字を区別する可能性のある問題をチェックします(GH7815)
名前がself.engine.table_names(schema = schema or self.met)にない場合は1190
a.schema):

C:\ Python27 \ lib \ site-packages \ pandas \ io \ sql.pyc in insert(self、chunksize)
726
727 chunk_iter = zip(* [arr [start_i:end_i] for arr in data_li
NS])
-> 728 self._execute_insert(conn、keys、chunk_iter)
729
730 def _query_iterator(self、result、chunksize、columns、coerce_float = T
ルー、

C:\ Python27 \ lib \ site-packages \ pandas \ io \ sql.pyc in _execute_insert(self、conn、k
eys、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_
iter]
-> 703 conn.execute(self.insert_statement()、data)
704
705 def insert(self、chunksize = None):

C:\ Python27 \ lib \ site-packages \ sqlalchemy \ engine \ base.pyc in execute(self、object
、_multiparams、* _ params)
912タイプ(オブジェクト))
913その他:
-> 914 return meth(self、multiparams、params)
915
916 def _execute_function(self、func、multiparams、params):

C:\ Python27 \ lib \ site-packages \ sqlalchemy \ sql \ elements.pyc in _execute_on_connect
ion(self、connection、multiparams、params)
321
322 def _execute_on_connection(self、connection、multiparams、params):
-> 323 return connection._execute_clauseelement(self、multiparams、para
MS)
324
325 def unique_params(self、_optionaldict、* _kwargs):

C:\ Python27 \ lib \ site-packages \ sqlalchemy \ engine \ base.pyc in _execute_clauseeleme
nt(self、elem、multiparams、params)
1008compiled_sql、
1009蒸留_params、
-> 1010compiled_sql、distributed_pa​​rams
1011)
self._has_eventsまたはself.engine._has_eventsの場合は1012:

C:\ Python27 \ lib \ site-packages \ sqlalchemy \ engine \ base.pyc in _execute_context(sel
f、方言、コンストラクター、ステートメント、パラメーター、* args)
1144パラメータ、
1145カーソル、
-> 1146コンテキスト)
1147
self._has_eventsまたはself.engine._has_eventsの場合は1148:

C:\ Python27 \ lib \ site-packages \ sqlalchemy \ engine \ base.pyc in _handle_dbapi_except
ion(self、e、ステートメント、パラメーター、カーソル、コンテキスト)
1342)
1343 else:
-> 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 not parameters and context.no_parameters:
self.dialect._has_eventsの場合は1118:

C:\ Python27 \ lib \ site-packages \ sqlalchemy \ dialects \ mysql \ mysqldb.pyc in do_execut
emany(自己、カーソル、ステートメント、パラメーター、コンテキスト)
93
94 def do_executemany(self、cursor、statement、parameters、context = None
):
---> 95 rowcount = cursor.executemany(statement、parameters)
コンテキストがNoneでない場合は96:
97 context._rowcount = rowcount

C:\ Python27 \ lib \ site-packages \ pymysql \ cursors.pyc in executemany(self、query、ar
gs)
153 return self._do_execute_many(q_prefix、q_values、q_postfix、
引数、
154 self.max_stmt_length、
-> 155 self._get_db()。encoding)
156
157 self.rowcount = sum(self.execute(query、arg)for arg in args)

C:\ Python27 \ lib \ site-packages \ pymysql \ cursors.pyc in _do_execute_many(self、pref
ix、values、postfix、args、max_stmt_length、encoding)
179 if isinstance(v、text_type):
PY2の場合は180:
-> 181 v = v.encode(encoding)
182他:
183 v = v.encode(encoding、 'surrogateescape')

UnicodeEncodeError: 'latin-1'コーデックは位置433-438の文字をエンコードできません:
序数が範囲外(256)

IO SQL

最も参考になるコメント

ありがとうございました! create_engine()呼び出しに「?charset = utf8」を追加すると、問題が解決しました。

全てのコメント3件

engineオブジェクトも構成してみましたか? http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#engine-creation-apiを参照してください

そして、再現可能な例を提供できますか? (このエラーが発生する小さなデータフレーム)

ありがとうございました! create_engine()呼び出しに「?charset = utf8」を追加すると、問題が解決しました。

今後の参照用: http

このページは役に立ちましたか?
0 / 5 - 0 評価