Django DB插入不正确的字符串值

时间:2011-05-07 15:27:54

标签: django string insert models

我正在解析一个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 :(得分:0)

我之前也遇到过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')