我正在使用 SQLite3 创建数据库。 我的 python 版本是 2.7.5。
在创建数据库之前,我只是创建了示例数据库并测试了它是否能正常运行。
失败了 id
即使我也没有递增
将其声明为 serial
类型。
我创建了一个简单的数据库:
import sqlite3
con = sqlite3.connect('sample.db')
cur = con.cursor()
cur.execute("""CREATE TABLE sample(id serial,test real)""")
cur.execute("""INSERT INTO sample(test) VALUES(?)""",(3,))
cur.execute("""INSERT INTO sample(test) VALUES(?)""",(6,))
cur.execute("""INSERT INTO sample(test) VALUES(?)""",(8,))
con.commit()
然后我获取了所有数据:
data = cur.execute("""SELECT * from sample""")
t = data.fetchall()
In [33]: t
Out[33]: [(None, 3.0), (None, 6.0), (None, 8.0)]
我期望这样:Out[33]: [(1, 3.0), (2, 6.0), (3, 8.0)]
但是,如您所见,所有 id
元素都是 None
我该如何解决这个问题? 我知道我可以通过增加一个变量并插入它来完成。 像这样:
id += 1
cur.execute("""CREATE TABLE sample(id serial,test real)""")
id += 1
cur.execute("""INSERT INTO sample(test) VALUES(?)""",(3,))
id += 1
cur.execute("""INSERT INTO sample(test) VALUES(?)""",(6,))
但是,这不是很糟糕吗?我不想这样做。 我想让我的代码清晰明了。
最佳答案
SQLite 中没有serial
数据类型。创建表的正确方法是使用 AUTOINCREMENT在 SQLite 中:
CREATE TABLE sample ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
test REAL);
关于python - SQLite3 序列类型没有增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19726028/