Найти - Пользователи
Полная версия: Проблема с записью данных в таблицу. Ошибка кодировки
Начало » Базы данных » Проблема с записью данных в таблицу. Ошибка кодировки
1
VProgramMist
На помощь! Начал работать с 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
ZerG
в начале файла есть
# -*- coding: utf-8 -*-
?
VProgramMist
Нет) Сейчас попробую. А можете смысл строки объяснить? Точнее к чему именно применяется кодировка?
VProgramMist
ZerG
в начале файла есть # -*- coding: utf-8 -*-?

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

  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()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB