我想在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
有人知道如何解决上述问题吗?
答案 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)
如果在插入上没有指定ROWID,或者指定的ROWID的值为NULL,则会自动创建适当的ROWID。
因此,您可以显式指定NULL:
INSERT INTO first(id) VALUES(NULL)
或根本不指定任何值:
INSERT INTO first DEFAULT VALUES