复合主键上的自动增量 - Sqlite3 + Python

时间:2011-07-22 16:38:55

标签: python sqlite

我有这样的代码

c.execute('CREATE TABLE IF NOT EXISTS base (ID INTEGER NOT NULL, col2 TEXT NOT NULL, col3 INTEGER, PRIMARY KEY(ID, col2))')

这段代码给了我一个 sqlite3.IntegrityError 异常,即使我非常确定我是第一次写这条记录。

所以,我试过

c.execute('CREATE TABLE IF NOT EXISTS base (ID INTEGER, col2 TEXT, col3 INTEGER, PRIMARY KEY(ID, col2))')

这会在 base 表中精确插入行但BUT,ID列根本不会自动递增。

我该怎么办?有什么想法吗?

1 个答案:

答案 0 :(得分:11)

在sqlite中,只有一个整数列是主键时才会获得自动增量行为。复合键可防止自动增量生效。

您可以通过将id定义为唯一的主键,然后在id, col3上添加其他唯一约束来获得类似的结果。

如果这仍然不是你想要的(比如,id根本不需要是唯一的),你可能必须使用触发器来使自动增量工作。