如何插入只包含一列自动增量主键的sqlite表?

时间:2014-06-06 05:02:14

标签: python sqlite insert primary-key auto-increment

我想在sqlite中有一个“计数器”表,它总是给我一个新的唯一ID。我通过以下方式管理了我需要的东西。首先,我创建下表:

cursor.execute('''create table second (id integer primary key autoincrement, age integer)''')

然后我执行以下命令序列:

cursor.execute('''insert into second (age) values (1)''')
cursor.lastrowid

每次执行上面两列时,我都会得到一个新的整数。这正是我需要的。但是,上面的解决方案并不优雅,因为我使用的是我真正不需要的列(“年龄”)。我使用的原因如下。我可以创建一个只包含一列ID的表:

cursor.execute('''create table first (id integer primary key autoincrement)''')

然而,问题是我无法设法插入此表。以下不起作用:

cursor.execute('''insert into first () values ()''')

我收到以下错误消息:

sqlite3.OperationalError: near ")": syntax error

有人知道如何解决上述问题吗?

2 个答案:

答案 0 :(得分:2)

这应该有效:

sqlite> CREATE TABLE first (id integer primary key autoincrement);
sqlite> INSERT INTO first (id) VALUES (null);
sqlite> SELECT * FROM first;
1
sqlite> INSERT INTO first (id) VALUES (null);
sqlite> SELECT * FROM first;
1
2

答案 1 :(得分:1)

documentation说:

  

如果在插入上没有指定ROWID,或者指定的ROWID的值为NULL,则会自动创建适当的ROWID。

因此,您可以显式指定NULL:

INSERT INTO first(id) VALUES(NULL)

或根本不指定任何值:

INSERT INTO first DEFAULT VALUES