Django DB вставляет неверное строковое значение - PullRequest
2 голосов
/ 07 мая 2011

Я анализирую CSV-файл (созданный в Windows) и пытаюсь заполнить таблицу базы данных, используя модель, которую я создал.

Я получаю эту ошибку:

pl = PriceList.objects.create(code=row[0], description=row[1],.........
Incorrect string value: '\xD0h:NAT...' for column 'description' at row 1

В моей таблице и поле описания используются параметры сортировки utf-8 и utf8_general_ci. Фактическое значение, которое я пытаюсь вставить, таково.

HOUSING:PS-187:1g\xd0h:NATURAL CO

Я не знаю какой-либо обработки строки, которую я должен сделать, чтобы преодолеть эту ошибку. Я думаю, что раньше я использовал простой скрипт на python для заполнения базы данных с помощью conn.escape_string (), и это сработало (если это поможет)

Спасибо

1 Ответ

0 голосов
/ 07 мая 2011

У меня были проблемы с читателем CSV и Unicode и раньше.В моем случае использование следующего помогло мне избежать ошибок.

С http://docs.python.org/library/csv.html

Модуль CSV не поддерживает прямое чтение и запись Unicode, ...

unicode_csv_reader ()ниже представлен генератор, который оборачивает csv.reader для обработки данных Unicode CSV (список строк Unicode).utf_8_encoder () - это генератор, который кодирует строки Unicode как UTF-8, по одной строке (или строке) за раз.Кодированные строки анализируются считывателем CSV, и unicode_csv_reader () декодирует ячейки в кодировке UTF-8 обратно в Unicode:

import csv

def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs):
    # csv.py doesn't do Unicode; encode temporarily as UTF-8:
    csv_reader = csv.reader(utf_8_encoder(unicode_csv_data),
                            dialect=dialect, **kwargs)
    for row in csv_reader:
        # decode UTF-8 back to Unicode, cell by cell:
        yield [unicode(cell, 'utf-8') for cell in row]

def utf_8_encoder(unicode_csv_data):
    for line in unicode_csv_data:
        yield line.encode('utf-8')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...