Pandas: to_sql UnicodeEncodeError

Creado en 1 sept. 2015  ·  3Comentarios  ·  Fuente: pandas-dev/pandas

escribir un marco de datos en sql da un UnicodeEncodeError, aunque sys.defaultencoding está configurado en "utf-8" y la base de datos mysql también usa utf-8 como intercalación predeterminada. ¿Algunas ideas? ¡Gracias!

En [6]: df1.to_sql (nombre = 'webshoptracks2', con = motor)

UnicodeEncodeError Traceback (última llamada más reciente)
en()
----> 1 df1.to_sql (nombre = 'webshoptracks2', con = motor)

C: \ Python27 \ lib \ site-packages \ pandas \ core \ generic.pyc en to_sql (self, name, con,
sabor, esquema, if_exists, index, index_label, chunksize, dtype)
980 yo, nombre, con, sabor = sabor, esquema = esquema, si_existe = si_
existe
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 en to_sql (frame, name, con, flav
o, esquema, if_exists, index, index_label, chunksize, dtype)
547 pandas_sql.to_sql (marco, nombre, if_exists = if_exists, index = index,
548 etiqueta_índice = etiqueta_índice, esquema = esquema,
-> 549 chunksize = chunksize, dtype = dtype)
550
551

C: \ Python27 \ lib \ site-packages \ pandas \ io \ sql.pyc en to_sql (self, frame, name, if_
existe, index, index_label, schema, chunksize, dtype)
1186 esquema = esquema, dtype = dtype)
1187 table.create ()
-> 1188 table.insert (tamaño de trozo)
1189 # compruebe si existen posibles problemas de sensibilidad entre mayúsculas y minúsculas (GH7815)
1190 si el nombre no está en self.engine.table_names (esquema = esquema o self.met
un esquema):

C: \ Python27 \ lib \ site-packages \ pandas \ io \ sql.pyc en insertar (self, chunksize)
726
727 chunk_iter = zip (* [arr [start_i: end_i] para arr en data_li
S t])
-> 728 self._execute_insert (conexión, claves, chunk_iter)
729
730 def _query_iterator (self, result, chunksize, columnas, coerce_float = T
ruda,

C: \ Python27 \ lib \ site-packages \ pandas \ io \ sql.pyc en _execute_insert (self, conn, k
eys, data_iter)
701 def _execute_insert (self, conn, keys, data_iter):
702 datos = [dict ((k, v) para k, v en zip (claves, fila)) para fila en datos_
iter]
-> 703 conn.execute (self.insert_statement (), datos)
704
705 def insert (self, chunksize = None):

C: \ Python27 \ lib \ site-packages \ sqlalchemy \ engine \ base.pyc en ejecución (self, object
, _multiparams, * _params)
912 tipo (objeto))
913 más:
-> 914 return meth (self, multiparams, params)
915
916 def _execute_function (self, func, multiparams, params):

C: \ Python27 \ lib \ site-packages \ sqlalchemy \ sql \ elements.pyc en _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
Sra)
324
325 def unique_params (self, _optionaldict, * _kwargs):

C: \ Python27 \ lib \ site-packages \ sqlalchemy \ engine \ base.pyc en _execute_clauseeleme
nt (self, elem, multiparams, params)
1008 compiled_sql,
1009 destilados_params,
-> 1010 compiled_sql, destilado_params
1011)
1012 si self._has_events o self.engine._has_events:

C: \ Python27 \ lib \ site-packages \ sqlalchemy \ engine \ base.pyc en _execute_context (sel
f, dialecto, constructor, declaración, parámetros, * args)
1144 parámetros,
1145 cursor,
-> contexto 1146)
1147
1148 si self._has_events o self.engine._has_events:

C: \ Python27 \ lib \ site-packages \ sqlalchemy \ engine \ base.pyc en _handle_dbapi_except
ion (self, e, declaración, parámetros, cursor, contexto)
1342)
1343 más:
-> 1344 util.reraise (* exc_info)
1345
1346 finalmente:

C: \ Python27 \ lib \ site-packages \ sqlalchemy \ engine \ base.pyc en _execute_context (sel
f, dialecto, constructor, declaración, parámetros, * args)
1114 declaración,
1115 parámetros,
-> contexto 1116)
1117 elif no parámetros y context.no_parameters:
1118 si self.dialect._has_events:

C: \ Python27 \ lib \ site-packages \ sqlalchemy \ dialects \ mysql \ mysqldb.pyc en do_execut
emany (yo, cursor, declaración, parámetros, contexto)
93
94 def do_executemany (self, cursor, declaración, parámetros, contexto = Ninguno
):
---> 95 rowcount = cursor.executemany (declaración, parámetros)
96 si el contexto no es Ninguno:
97 context._rowcount = recuento de filas

C: \ Python27 \ lib \ site-packages \ pymysql \ cursors.pyc en executemany (self, query, ar
gs)
153 return self._do_execute_many (q_prefix, q_values, q_postfix,
argumentos,
154 self.max_stmt_length,
-> 155 self._get_db (). Codificación)
156
157 self.rowcount = sum (self.execute (consulta, arg) para arg en args)

C: \ Python27 \ lib \ site-packages \ pymysql \ cursors.pyc en _do_execute_many (self, pref
ix, valores, sufijo, argumentos, max_stmt_length, codificación)
179 si es instancia (v, tipo_texto):
180 si PY2:
-> 181 v = v.encode (codificación)
182 más:
183 v = v.encode (codificación, 'surrogateescape')

UnicodeEncodeError: el códec 'latin-1' no puede codificar caracteres en la posición 433-438:
ordinal fuera del rango (256)

IO SQL

Comentario más útil

¡Gracias! Agregar '? Charset = utf8' a la llamada create_engine () resolvió el problema.

Todos 3 comentarios

¿Intentaste configurar el objeto engine también? Ver http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#engine -creation-api

¿Y puede proporcionar un ejemplo reproducible? (un pequeño marco de datos que le da este error)

¡Gracias! Agregar '? Charset = utf8' a la llamada create_engine () resolvió el problema.

¿Fue útil esta página
0 / 5 - 0 calificaciones