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 Traceback(๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰)
~์—()
----> 1 df1.to_sql(์ด๋ฆ„='webshoptracks2', con=์—”์ง„)

C:\Python27\lib\site-packages\pandas\core\generic.pyc in to_sql(self, name, con,
๋ง›, ์Šคํ‚ค๋งˆ, if_exists, ์ธ๋ฑ์Šค, index_label, chunksize, dtype)
980ํ™”
์กด์žฌํ•œ๋‹ค,
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
or, schema, if_exists, index, index_label, chunksize, dtype)
547
548
--> 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 (์ฃผ)
1187ํ™”
-> 1188 table.insert(์ฒญํฌ ํฌ๊ธฐ)
1189 # ์ž ์žฌ์ ์ธ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ๋ฌธ์ œ ํ™•์ธ(GH7815)
1190 if name is not in self.engine.table_names(schema=schema or self.met
์Šคํ‚ค๋งˆ):

C:\Python27\lib\site-packages\pandas\io\sql.pyc in insert(self, chunksize)
726
727*
์„ฑ])
--> 728 self._execute_insert(conn, ํ‚ค, chunk_iter)
729
730ํ™”
ํ›„ํšŒ,

C:\Python27\lib\site-packages\pandas\io\sql.pyc in _execute_insert(self, conn, k
eys, data_iter)
701ํ™”
702 ๋ฐ์ดํ„ฐ = [dict((k, v) k, v zip(keys, row))
๋ฐ˜๋ณต]
--> 703 conn.execute(self.insert_statement(), ๋ฐ์ดํ„ฐ)
704
705ํ™”

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ํ™”

_execute_on_connect์˜ C:\Python27\lib\site-packages\sqlalchemy\sql\elements.pyc
ion(self, connection, multiparams, params)
321
322ํ™”
--> 323 return connection._execute_clauseelement(self, multiparams, para
ms)
324
325ํ™”

C:\Python27\lib\site-packages\sqlalchemy\engine\base.pyc _execute_clauseeleme
nt(์ž์ฒด, ์š”์†Œ, ๋‹ค์ค‘ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜)
1008 ์ปดํŒŒ์ผ๋œ_sql,
1009 ์ฆ๋ฅ˜๋œ ๋งค๊ฐœ๋ณ€์ˆ˜,
-> 1010 ์ปดํŒŒ์ผ๋œ_SQL, ์ฆ๋ฅ˜๋œ_๋งค๊ฐœ๋ณ€์ˆ˜
1011)
1012 if 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 if self._has_events ๋˜๋Š” self.engine._has_events:

C:\Python27\lib\site-packages\sqlalchemy\engine\base.pyc _handle_dbapi_except
ion(self, 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 if self.dialect._has_events:

C:\Python27\lib\site-packages\sqlalchemy\dialects\mysql\mysqldb.pyc in do_execut
๋งŽ์€(์ž์ฒด, ์ปค์„œ, ๋ช…๋ น๋ฌธ, ๋งค๊ฐœ๋ณ€์ˆ˜, ์ปจํ…์ŠคํŠธ)
93
94 def do_executemany(self, cursor, statement, parameters, context=None
):
---> 95 rowcount = cursor.executemany(๋ฌธ, ๋งค๊ฐœ๋ณ€์ˆ˜)
์ปจํ…์ŠคํŠธ๊ฐ€ ์—†์Œ์ด ์•„๋‹Œ ๊ฒฝ์šฐ 96:
97ํ™”

C:\Python27\lib\site-packages\pymysql\cursors.pyc in executemany(self, query, ar
์ง€)
153 ๋ฐ˜ํ™˜ self._do_execute_many(q_prefix, q_values, q_postfix,
์ธ์ˆ˜,
154ํ™”
--> 155 self._get_db().encoding)
156
157ํ™”

C:\Python27\lib\site-packages\pymysql\cursors.pyc in _do_execute_many(self, pref
ix, ๊ฐ’, ์ ‘๋ฏธ์‚ฌ, args, max_stmt_length, ์ธ์ฝ”๋”ฉ)
179 if isinstance(v, text_type):
PY2์ธ ๊ฒฝ์šฐ 180:
--> 181 v = v.encode(์ธ์ฝ”๋”ฉ)
182 ๊ธฐํƒ€:
183ํ™”

UnicodeEncodeError: 'latin-1' ์ฝ”๋ฑ์€ 433-438 ์œ„์น˜์˜ ๋ฌธ์ž๋ฅผ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ฒ”์œ„์— ์—†๋Š” ์„œ์ˆ˜(256)

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! create_engine() ํ˜ธ์ถœ์— '?charset=utf8'์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

engine ๊ฐœ์ฒด๋„ ๊ตฌ์„ฑํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#engine -creation-api ์ฐธ์กฐ

๊ทธ๋ฆฌ๊ณ  ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? (์ด ์˜ค๋ฅ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„)

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! create_engine() ํ˜ธ์ถœ์— '?charset=utf8'์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰