如何在Python中使用sqlite3构建索引表(类似字典)
假设我有一个字符串列表,里面可能有重复的项:
A
B
C
A
A
C
D
E
F
F
我想要创建一个列表,为每个项目分配一个唯一的索引,像这样:
1 A
2 B
3 C
4 D
5 E
6 F
现在我用下面的SQL语句创建了一个sqlite3数据库:
CREATE TABLE aa ( myid INTEGER PRIMARY KEY AUTOINCREMENT,
name STRING,
UNIQUE (myid) ON CONFLICT FAIL,
UNIQUE (name) ON CONFLICT FAIL);
我的计划是用Python把每一行插入到数据库中。
我想问的是,当在Python的sqlite3模块中插入时,如果发生冲突,应该如何处理错误?比如:程序会打印出一个警告信息,告诉我哪个项目发生了冲突,然后继续进行下一个插入操作,这样该怎么做呢?
谢谢
2 个回答
1
你可以使用一个集合来过滤掉列表中的重复项,然后只插入那些不重复的值:
>>> set(['A', 'B', 'C', 'D', 'A', 'A', 'A', 1, 2, 1, 3, object(), object()])
set(['A', 1, 'C', 'B', 'D', 2, <object object at 0x100274590>, 3, <object object
at 0x1002746a0>])
或者在每次提交的时候用一个try-except语句来检查一下,这个值是否已经在数据库里了。
1
为什么不试试看,看看会抛出什么异常呢?我觉得这并不难,不过……
try:
conn.excecute('...')
except IntegrityError:
pass