当前位置:首页 > 数据库 > SQlite

插入Unicode到sqlite吗?

我仍在学习Python,作为一个小项目,我编写了一个脚本,该脚本将获取文本文件中的值并将其插入sqlite3数据库中.但是其中一些名称带有奇怪的字母(我想您会称其为非ASCII),并且在出现时会产生错误.这是我的小脚本(请告诉我是否仍然可以使用Pythonic):
    导入sqlite3

f = open('complete', 'r')
fList = f.readlines()
conn = sqlite3.connect('tpb')
cur = conn.cursor()

for i in fList:
    exploaded = i.split('|')
    eList = (
        (exploaded[1], exploaded[5])
    )
    cur.execute('INSERT INTO magnets VALUES(?, ?)', eList)
    conn.commit()
cur.close()

并产生此错误:

Traceback (most recent call last):
  File "C:UsersAdminDesktopsortinghat.py", line 13, in <module>
    cur.execute('INSERT INTO magnets VALUES(?, ?)', eList)
sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a te
xt_factory that can interpret 8-bit bytestrings (like text_factory = str). It is
highly recommended that you instead just switch your application to Unicode str
ings.

解决方法:

要将文件内容转换为unicode,您需要使用其中的任何编码进行解码.
看来您使用的是Windows,所以最好选择cp1252.
如果您从其他地方获得文件,则所有赌注都将关闭.

编码排序后,一种简单的解码方法是使用编解码器模块,例如:

import codecs
# ...
with codecs.open('complete', encoding='cp1252') as fin: # or utf-8 or whatever
  for line in fin:
    to_insert = (line.split('|')[1], line.split('|')[5])
    cur.execute('INSERT INTO magnets VALUES (?,?)', to_insert)
    conn.commit()
# ...

【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!