Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pysqlite插入unicode数据8位bytestring错误_Python_Sqlite_Unicode - Fatal编程技术网

Python pysqlite插入unicode数据8位bytestring错误

Python pysqlite插入unicode数据8位bytestring错误,python,sqlite,unicode,Python,Sqlite,Unicode,我知道以前也有人问过类似的问题,但答案似乎无法说明我做错了什么 我正在尝试插入此行: (Pdb)打印行 [886',39',83474',0',0',0',0',1.00',D',20070813',R',C',B',SOCK 4PK','\xe9\x9e\x8b\xe5\xb0\xba\xe5\xaf\xb86-9.5/24-27.5CM',PR'] 在此表中: 创建表项(“whs”int、“dept”int、“item”int、“dsun”int、“oh”int、“ohrtv”int、“ad

我知道以前也有人问过类似的问题,但答案似乎无法说明我做错了什么

我正在尝试插入此行: (Pdb)打印行 [886',39',83474',0',0',0',0',1.00',D',20070813',R',C',B',SOCK 4PK','\xe9\x9e\x8b\xe5\xb0\xba\xe5\xaf\xb86-9.5/24-27.5CM',PR']

在此表中: 创建表项(“whs”int、“dept”int、“item”int、“dsun”int、“oh”int、“ohrtv”int、“adjp”int、“adjn”int、“销售”文本、“统计”文本、“lsldt”int、“cat1”文本、“cat3”文本、“des1”文本、“sgn3”文本、“单位”文本)

sgn3列似乎是问题的根源。它被定义为文本,要插入的数据是utf-8。为什么我会收到sqlite3错误

ProgrammingError:“除非使用可以解释8位bytestr…=str的文本工厂,否则不能使用8位ByTestRing。”。强烈建议您只需将应用程序切换到Unicode字符串。”

下面是执行插入的代码:

query = 'insert into %s values(%s)' % (
    self.tablename,
    ','.join(['?' for field in row])
)
self.con.execute(query, row)
下面是创建要插入的记录生成器的过程:

def encode_utf_8(self, csv_data, csv_encoding):
    """Decodes from 'csv_encoding' and encodes to utf-8.  

    Accepts any open csv file encoding using any scheme recognized by 
    python. Returns a generator.  

    """
    for line in csv_data:
        try:
            yield line.decode(csv_encoding).encode('utf-8')
        except UnicodeDecodeError:
            next

这是我见过的最有用的错误消息之一。照上面说的去做。馈送它
unicode
对象,而不是UTF-8编码的
str
对象。换句话说,丢失
.encode('utf-8')
,或者稍后再进行解码('utf-8')…什么是
csvdata

如果在现有代码中出现UnicodeDecodeError:

(1) 你应该做一些比你打算用它做的更有用的事情(把它扫到地毯下)

(2) 您可能希望将
next
更改为
pass

评论回复


哈哈,这是一个非常有用的错误 信息

哈哈???我不是在开玩笑;它准确地告诉你该做什么

在这种情况下,csvdata是一个csv文件 在Python2.x中使用big5编码

您将什么称为“csv文件”:

如果我选择不编码到utf-8,我的 行是ascii码对吗

完全错误<代码>字节从文件中读取。解码('big5')生成一个
unicode
对象。你可能喜欢读书

所以我需要在保存到数据库之前显式地将它们更改为unicode


不,它们已经是unicode了。但是,根据csvdata是什么,您可能需要将其编码到utf8中,以通过csv机制将其解码。

这是我见过的最有用的错误消息之一。照上面说的去做。馈送它
unicode
对象,而不是UTF-8编码的
str
对象。换句话说,丢失
.encode('utf-8')
,或者稍后再进行解码('utf-8')…什么是
csvdata

如果在现有代码中出现UnicodeDecodeError:

(1) 你应该做一些比你打算用它做的更有用的事情(把它扫到地毯下)

(2) 您可能希望将
next
更改为
pass

评论回复


哈哈,这是一个非常有用的错误 信息

哈哈???我不是在开玩笑;它准确地告诉你该做什么

在这种情况下,csvdata是一个csv文件 在Python2.x中使用big5编码

您将什么称为“csv文件”:

如果我选择不编码到utf-8,我的 行是ascii码对吗

完全错误<代码>字节从文件中读取。解码('big5')生成一个
unicode
对象。你可能喜欢读书

所以我需要在保存到数据库之前显式地将它们更改为unicode


不,它们已经是unicode了。然而,根据csvdata是什么,您可能希望将其编码为utf8,以通过csv机制获得它们,然后在以后对其进行解码。

haha,这是一个非常有用的错误消息csvdata是一个csv文件,在本例中使用python 2.x中的big5编码。如果我选择不编码为utf-8,我的行是ascii,对吗?所以在保存到数据库之前,我需要显式地将它们更改为unicode?哈哈,这是一个非常有用的错误消息csvdata是一个csv文件,在本例中使用python 2.x中的big5编码。如果我选择不编码为utf-8,我的行是ascii,对吗?所以我需要在保存到数据库之前显式地将它们更改为unicode?
(1) csvdata = open('my_big5_file', 'rb')
(2) csvdata = csv.reader(open('my_big5_file', 'rb'))
(3) other; please specify