如何在Python中使用sqlite3构建索引表(类似字典)

0 投票
2 回答
1443 浏览
提问于 2025-04-16 00:07

假设我有一个字符串列表,里面可能有重复的项:

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

撰写回答