SQLite3主键不能自动递增

时间:2019-03-16 20:42:50

标签: python python-3.x sqlite auto-increment

我尝试编写此代码以希望它会自动递增,但是不知何故它不起作用,并且id列中的输出条目设置为'None'。我也尝试了其他答案,但没有一个起作用。请帮助如果可能的话。

代码如下:

import sqlite3

def connect():
    conn=sqlite3.connect("books.db")
    cur=conn.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY,title text,author text,year int,isbn int)")
    conn.commit()
    conn.close()

def insert(title,author,year,isbn):
    conn=sqlite3.connect("books.db")
    cur=conn.cursor()
    cur.execute("INSERT INTO book VALUES (?,?,?,?)",(title,author,year,isbn))
    conn.commit()
    conn.close()

def view():
    conn=sqlite3.connect("books.db")
    cur=conn.cursor()
    cur.execute("SELECT * FROM book ")
    rows=cur.fetchall()
    conn.close()
    return rows

connect()
insert("sample","abc",2003,123456)
insert("sample2","def",2003,123457)
print(view())

这是输出:

[(None, 'sample', 'abc', 2003, 123456), (None, 'sample2', 'def', 2003, 123457)]

2 个答案:

答案 0 :(得分:0)

First SQLite建议您不要使用自动增量作为主要增量,应该选择尽可能定义唯一记录的字段。

第二个您要传入的数据类型为“ int”,并且在主键之后需要使用autoincrement关键字。

第三,您应该避免在select语句中使用*。如果仅需要返回行号,则可以查询所需的字段并添加标准字段“ rowid”。

答案 1 :(得分:0)

答案编辑:由于Shawn的评论,我回过头来处理代码并找出问题所在。的确,不需要AUTOINCREMENT,因此这不是问题(我学到了一些新知识关于sqlite)。

以下代码可以正常工作。请注意,由于您没有向表中的所有列提供数据,因此必须在insert语句中指定要将数据插入到哪些列中。我已经删除了不必要的AUTOINCREMENT,并修改了insert语句以使其正常工作。

还请注意:如其他人所述,您不应使用*通配符来选择生产代码中的所有列,而应单独列出所有列。

import sqlite3

def connect():
    conn=sqlite3.connect("books.db")
    cur=conn.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY,title text,author text,year int,isbn int)")
    conn.commit()
    conn.close()

def insert(title,author,year,isbn):
    conn=sqlite3.connect("books.db")
    cur=conn.cursor()
    cur.execute("INSERT INTO book (title, author, year, isbn) VALUES (?,?,?,?)",(title,author,year,isbn))
    conn.commit()
    conn.close()

def view():
    conn=sqlite3.connect("books.db")
    cur=conn.cursor()
    cur.execute("SELECT * FROM book ")
    rows=cur.fetchall()
    conn.close()
    return rows

connect()
insert("sample","abc",2003,123456)
insert("sample2","def",2003,123457)
print(view())

产生的输出是:

[(1, 'sample', 'abc', 2003, 123456), (2, 'sample2', 'def', 2003, 123457)]