首页 文章

SQLite3 - 一个单元格与列中的其他单元格类型不同

提问于
浏览
0

我有一个 SQLite3 db . 我使用 SQLite Browser 和Python来处理这个数据库 . 我有一列 description ,这是tabe上的一个文本列 . 我使用 Sqlite3 Browser 更改了一行中的文本 . 从那时起,我在python脚本中遇到错误 .

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 36: ordinal not in range(128)

我试图捕获这个异常并打印行,我意识到,除了文本,还有对象缓冲区(这只是一个单元格)行中的其他单元格正常:

<read-write buffer ptr 0x047684B0, size 4307 at 0x04768490>

这是唯一具有此对象的单元格,我未修改的单元格是unicode .

如何解决这个问题?有没有办法将缓冲区转换为数据库中的字符串?

编辑:python代码

with engine.connect() as connection:
    for row in connection.execute('SELECT * FROM final_table'):
        try:
            if any(x in ' '.join(unicode(y) for y in row[:2]+row[3:4]+row[5:13]+row[14:]) for x in ('mm445','xxs', '998s54a')):
                print row[:2]+row[3:4]+row[5:13]+row[14:]
                for x in row:
                    print type(x)
        except:
            print 'exc'
            print row[:2]+row[3:4]+row[5:13]+row[14:]

1 回答

  • 1

    您可以使用 unicode() 将字节字符串从某些编码转换为Unicode,但除非您指定编码,否则Python会假定它是ASCII .

    SQLite不使用ASCII而是使用UTF-8,所以你必须告诉Python它:

    ...join(unicode(y, 'UTF-8') for y in ...)
    

相关问题