python- проблемы с кодировкой при считывании из mysql БД и записи обратно

225
04 марта 2018, 22:07

Пытаюсь делать это вот так Текст комментов и оценки формируют Dataframe, который потом я записываю в другую таблицу :

db_connection = 'mysql+pymysql://root@localhost/mom_db'
conn = create_engine(db_connection, encoding='utf-8')
test = pd.read_sql("SELECT comm FROM comments ", conn)
test['comm'] = test['comm'].apply(delete_tabs)
print(test['comm'])
#test['expected'] = [-1, -1, 1, 1]
test['pred_lr'] = grid_lr.best_estimator_.predict(test['comm'])
test['pred_nb'] = grid_nb.best_estimator_.predict(test['comm'])
pd.options.display.expand_frame_repr = False
test.to_sql(name='est_comm', con=conn, if_exists='append', index=False)

На выходе получаю:

UnicodeEncodeError: 'latin-1' codec can't encode character '\u0418' in position 2: ordinal not in range(256)

перепробовал уже очень много всего. И в Apache-2.4-x64_server.conf строчки дописывал, и различным образом пытался указать кодировку в самом скритпе. ничего не помогло.

Answer 1

Используйте charset=utf8:

db_connection = 'mysql+pymysql://root@localhost/mom_db?charset=utf8'
#   ---->                                             ^^^^^^^^^^^^^
conn = create_engine(db_connection, encoding='utf-8')
READ ALSO
сравнение времени в mySql

сравнение времени в mySql

Доброго времени сутокСтолкнулся с такой проблемой

216
Получить главный ключ по трем уровням

Получить главный ключ по трем уровням

Задача следующая: Есть табличка keys со столбиками: key | bind Где key - это ключ, а bind - это так сказать привязанныйkeyПример:

215
MySQL и заглавная “И”

MySQL и заглавная “И”

Работаю с MySQL таблицей, для всей таблицы при создании указано CHARACTER SET=utf8mb4 COLLATE=utf8mb4_binКириллица обрабатывается вся успешно, за исключением...

189