Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2018 10:22:50

VProgramMist
Зарегистрирован: 2018-11-17
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с записью данных в таблицу. Ошибка кодировки

На помощь! Начал работать с Python'ом совсем недавно. Написал скрапер, который тащит метаданные с Google Play. Данные забираются и выводятся нормально (т.е. кириллица не сыпется), но при попытке записать эти данные в базу (юзаю модуль MySQLdb), как только встречается запись с кириллицей в поле, выбрасывает следующее:

_mysql_exceptions.OperationalError: (1366, “Incorrect string value: ‘\\xF0\\x9F\\x8D\\x80’ for column ‘title’ at row 1”)

Кодировка базы, таблиц и полей utf8_general_ci.
Связь с базой устанавливаю следующим образом:
 conn = MySQLdb.connect('localhost', 'VProgramMist', '1998Vm0000', 'mobasta_history', charset='utf8', init_command='SET NAMES UTF8')

Записываю данные в базу следующим:

        sql_str = """INSERT
             INTO history (app_id, title, score, price, free, iap,
             iap_range, size, installs, content_rating,
             date_point, category, collection)
             VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
        cursor.execute(sql_str, (
            row['app_id'], row['title'], row['score'],
            row['price'], row['free'], row['iap'],
            row['iap_range'], row["size"], row['installs'],
            row['content_rating'][0], datetime.date.today(),
            row['category'][0], row['collection']))

Версия Python 3.7
Версия MySQL - 5.7

Отредактировано VProgramMist (Ноя. 17, 2018 11:05:38)

Офлайн

#2 Ноя. 20, 2018 15:10:49

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2583
Репутация: +  60  -
Профиль   Отправить e-mail  

Проблема с записью данных в таблицу. Ошибка кодировки

в начале файла есть
# -*- coding: utf-8 -*-
?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Онлайн

#3 Ноя. 21, 2018 04:06:35

VProgramMist
Зарегистрирован: 2018-11-17
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с записью данных в таблицу. Ошибка кодировки

Нет) Сейчас попробую. А можете смысл строки объяснить? Точнее к чему именно применяется кодировка?

Офлайн

#4 Ноя. 21, 2018 04:28:40

VProgramMist
Зарегистрирован: 2018-11-17
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с записью данных в таблицу. Ошибка кодировки

ZerG
в начале файла есть # -*- coding: utf-8 -*-?

С этой строкой из 5 потоков до конца дошёл лишь один. У 4 остальных была та же ошибка. При чём, когда взглянул на данные, считанные 5-ым потоком, увидел там несколько записей в кириллице… Теперь я окончательно запутался…

Офлайн

#5 Ноя. 28, 2018 16:28:13

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2583
Репутация: +  60  -
Профиль   Отправить e-mail  

Проблема с записью данных в таблицу. Ошибка кодировки

Вы криво выгребаете данные.
Строка в начале файла нужна.
дальше нужно разбираться с источником данных.
Откудова в какой кодировке вам что приходит и только после этого совать уже в базу!
Если вы распечатаете

  row['app_id'], row['title'], row['score'],
            row['price'], row['free'], row['iap'],
            row['iap_range'], row["size"], row['installs'],
            row['content_rating'][0], datetime.date.today(),
            row['category'][0], row['collection'])

print() корректно все отображает?
почитайте про encode() decode()



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Онлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version