Я использую py mysql (0.9.3) для объединения и очистки MySQL серверных (8.0.19) таблиц через python и записи таблицы в базу данных с использованием sqlalchemy. Но продолжайте выдавать неправильное строковое значение ошибки.
InternalError: (pymysql.err.InternalError) (1366, "Incorrect string value: '\\xC5\\x81asis...' for column 'client_last_name' at row 726")
Я пытался использовать наборы символов latin1, utf8 и utf8mb4 в своем подключении к базе данных и создателе движка, но ошибка та же.
db = pymysql.connect(host='',
user='',
password='',
db='',
charset="utf8mb4")
engine = create_engine('mysql+pymysql://user:pass@port/schema'+'?charset=utf8mb4')
con = engine.connect()
Это строка кода, генерирующая ошибку: full_email_stats.to_sql("email_stats", con, if_exists="replace")
Трассировка:
File "<ipython-input-33-8abe82be8923>", line 128, in <module>
full_email_stats.to_sql("email_stats", con, if_exists="replace")
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py", line 2663, in to_sql
method=method,
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pandas/io/sql.py", line 521, in to_sql
method=method,
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pandas/io/sql.py", line 1317, in to_sql
table.insert(chunksize, method=method)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pandas/io/sql.py", line 755, in insert
exec_insert(conn, keys, chunk_iter)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pandas/io/sql.py", line 669, in _execute_insert
conn.execute(self.table.insert(), data)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 982, in execute
return meth(self, multiparams, params)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 293, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1101, in _execute_clauseelement
distilled_params,
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1250, in _execute_context
e, statement, parameters, cursor, context
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1476, in _handle_dbapi_exception
util.raise_from_cause(sqlalchemy_exception, exc_info)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 152, in reraise
raise value.with_traceback(tb)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1226, in _execute_context
cursor, statement, parameters, context
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 148, in do_executemany
rowcount = cursor.executemany(statement, parameters)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pymysql/cursors.py", line 197, in executemany
self._get_db().encoding)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pymysql/cursors.py", line 229, in _do_execute_many
rows += self.execute(sql + postfix)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pymysql/cursors.py", line 170, in execute
result = self._query(query)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pymysql/cursors.py", line 328, in _query
conn.query(q)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pymysql/connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pymysql/connections.py", line 732, in _read_query_result
result.read()
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pymysql/connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pymysql/connections.py", line 684, in _read_packet
packet.check_error()
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pymysql/protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "/Users/AdrianAlvarez/opt/anaconda3/lib/python3.7/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
InternalError: (pymysql.err.InternalError) (1366, "Incorrect string value: '\\xC5\\x81asis...' for column 'client_last_name' at row 726")
Кадры данных имели другую кодировку в MySQL. Кто-нибудь получил представление о том, как справиться с этим?
Это может быть растяжка, но я проделал ту же процедуру в r и у меня не было проблем с кодировками. Кто-нибудь знает почему?