ID标签不会自动增加python中的数字

时间:2019-06-18 10:17:40

标签: python python-3.x sqlite

我正在学习python,并尝试复制在线教程的内容。我正在尝试创建一个Python桌面应用程序,其中数据存储在Postgresql中。代码添加到下面,

 `cur.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY, title text, author text, year integer, isbn integer)")`

问题出在(id INTEGER PRIMARY KEY),当我执行代码时,它没有显示任何内容代替第一个索引。我想显示数字。 请帮助

这是针对Python 3.7.3,psycopg2 == 2.8.3,

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 integer, isbn integer)")
conn.commit()
conn.close()

我期望的结果是第一个索引中数字的自动递增,目前它显示为NONE。 下面是现在和预期的结果。 无标题作者年份isbn 01标题作者年份isbn

2 个答案:

答案 0 :(得分:5)

因为您说我是手动插入数据,而不是

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 integer, isbn integer)")
conn.commit()
conn.close()

尝试使用

def connect():
conn=sqlite3.connect("books.db")
cur=conn.cursor()
cur.execute("SELECT * FROM books")
for row in cur:
    print(row[0],row[1],row[2],row[3],row[4])
conn.commit()
conn.close()

答案 1 :(得分:3)

尝试使用Cursor执行不适用于CREATE语句,因此不适用于NONE。参见下面的示例。

重新索引:-

没有特定的索引,因为column_name INTEGER PRIMARY KEY的特殊之处在于它将列定义为rowid列的别名,rowid列是使用基础B树存储引擎的特殊固有索引。

当插入一行时,如果未为该列指定任何值(例如INSERT INTO book (title,author, year, isbn) VALUES ('book1','The Author','1999','1234567890'),则 id 将为1,通常(但不确定)插入的下一行将具有一个 id (共2个,依此类推)。

如果在添加了某些行后使用SELECT * FROM book,则将根据 id 对行进行排序,因为未指定/使用其他索引。

也许看看Rowid Tables

示例

也许考虑以下示例:-

DROP TABLE IF EXISTS book;
CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY, title text, author text, year integer, isbn integer);
INSERT INTO book (title,author, year, isbn) VALUES 
    ('book1','The Author','1999','1234567890'),
    ('book2','Author 2','1899','2234567890'),
    ('book3','Author 3','1799','3234567890')
;
INSERT INTO book VALUES (100,'book10','Author 10','1999','4234567890'); --<<<<<<<<<< specific ID
INSERT INTO book (title,author, year, isbn) VALUES 
    ('book11','Author 11','1999','1234567890'),
    ('book12','Author 12','1899','2234567890'),
    ('book13','Author 13','1799','3234567890')
;
INSERT INTO book VALUES (10,'book10','Author 10','1999','4234567890'); --<<<<<<<<<< specific ID
SELECT * FROM book; 

此:-

  1. 拖放书本表(使其易于重新运行)
  2. 创建书表。
  3. 插入的3本书,未指定 id (典型)
  4. 插入是第四本书,但特定的 id 为100
  5. INSERT (另外3本书)(不是因为它们是插入前的最高ID,所以它们将是101-103,因为ID是最高的)
  6. 插入是最后一行BUT,其特定的 id 为10。
  7. 根据基于 id的隐藏索引,
  8. 选择将书本表中所有列的所有行排序,因为未指定 ORDER BY 。注意尽管id 10是最后插入的,但它是第四行。

结果

enter image description here

在Python中:-

conn = sqlite3.connect("books.db")
conn.execute("DROP TABLE IF EXISTS book")
conn.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY,title text, author text, year integer, isbn integer)")
conn.execute("INSERT INTO book (title,author, year, isbn) "
             "VALUES('book1','The Author','1999','1234567890'), "
             "('book2','Author 2','1899','2234567890'), "
             "('book3','Author 3','1799','3234567890');")
conn.execute("INSERT INTO book VALUES (100,'book10','Author 10','1999','4234567890'); --<<<<<<<<<< specific ID")
conn.execute("INSERT INTO book (title,author, year, isbn) VALUES ('book11','Author 11','1999','1234567890'),('book12','Author 12','1899','2234567890'),('book13','Author 13','1799','3234567890');")
conn.execute("INSERT INTO book VALUES (10,'book10','Author 10','1999','4234567890'); --<<<<<<<<<< specific ID")
cur = conn.cursor()
cur.execute("SELECT * FROM book") 
for each in cur:
    print("{0:<20} {1:<20} {2:<20} {3:<20} {4:<20}".format(each[0],each[1],each[2],each[3],each[4]))
conn.commit()
conn.close()

结果:-

1                    book1                The Author           1999                 1234567890          
2                    book2                Author 2             1899                 2234567890          
3                    book3                Author 3             1799                 3234567890          
10                   book10               Author 10            1999                 4234567890          
100                  book10               Author 10            1999                 4234567890          
101                  book11               Author 11            1999                 1234567890          
102                  book12               Author 12            1899                 2234567890          
103                  book13               Author 13            1799                 3234567890