SQLite3串行类型没有增加

Sam*_*aiT 5 python sqlite

我使用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()
Run Code Online (Sandbox Code Playgroud)

然后我获取了所有数据:

data = cur.execute("""SELECT * from sample""")
t = data.fetchall()

In [33]: t
Out[33]: [(None, 3.0), (None, 6.0), (None, 8.0)]
Run Code Online (Sandbox Code Playgroud)

我期待这个: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,))
Run Code Online (Sandbox Code Playgroud)

但是,这不是很糟糕吗?我不想这样做.我想让我的代码清晰明了.

Ale*_*kov 7

serialSQLite中没有数据类型.创建表的正确方法是使用SQLite中的AUTOINCREMENT:

CREATE TABLE sample ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
                      test REAL);
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 5

您需要将列标记为INTEGER PRIMARY KEYINTEGER PRIMARY KEY AUTOINCREMENT获得自动递增行为。

这两种类型之间的区别是微妙的。后一种形式永远不会重用 ID。请参阅ROWID 和 INTEGER PRIMARY KEY文档。