如何使用Python在SQLite中正确设置列的自动增量?

y1aodyip  于 2023-01-05  发布在  SQLite
关注(0)|答案(4)|浏览(235)

我一直在尝试下面的代码:

import sqlite3
data_person_name = [('Michael', 'Fox'),
                    ('Adam', 'Miller'),
                    ('Andrew', 'Peck'),
                    ('James', 'Shroyer'),
                    ('Eric', 'Burger')]
con = sqlite3.connect(":memory:")
c = con.cursor()
c.execute('''CREATE TABLE q1_person_name
             (name_id integer auto_increment primary key,
              first_name varchar(20) NOT NULL,
              last_name varchar(20) NOT NULL)''')
c.executemany('INSERT INTO q1_person_name VALUES (?,?,?)', data_person_name)
for row in c.execute('SELECT * FROM q1_person_name'):
    print row

有人能帮我使name_id自动递增吗?

dnph8jn4

dnph8jn41#

在SQLite中,INTEGER PRIMARY KEY列是自动递增的。还有一个AUTOINCREMENT关键字。当在INTEGER PRIMARY KEY AUTOINCREMENT中使用时,ID创建的算法略有不同。

#!/usr/bin/python

import sqlite3
data_person_name = [('Michael', 'Fox'),
                    ('Adam', 'Miller'),
                    ('Andrew', 'Peck'),
                    ('James', 'Shroyer'),
                    ('Eric', 'Burger')]

con = sqlite3.connect(":memory:")

with con:

    c = con.cursor()

    c.execute('''CREATE TABLE q1_person_name
                 (name_id INTEGER PRIMARY KEY,
                  first_name varchar(20) NOT NULL,
                  last_name varchar(20) NOT NULL)''')
    c.executemany('INSERT INTO q1_person_name(first_name, last_name) VALUES (?,?)', data_person_name)

    for row in c.execute('SELECT * FROM q1_person_name'):
        print(row)

此代码现在工作正常。

c.executemany('INSERT INTO q1_person_name(first_name, last_name) VALUES (?,?)', data_person_name)

当使用自动递增时,我们必须显式地声明列名,忽略自动递增的列名。

$ ./test.py 
(1, u'Michael', u'Fox')
(2, u'Adam', u'Miller')
(3, u'Andrew', u'Peck')
(4, u'James', u'Shroyer')
(5, u'Eric', u'Burger')

这是代码示例的输出。

waxmsbnn

waxmsbnn2#

看起来您已经做过了。所以插入时不需要引用该字段。

INSERT INTO q1_person_name (first_name, last_name) VALUES (?,?)
muk1a3rh

muk1a3rh3#

executemany语句中的第一个?替换为null
所以下面这行可以重写:

c.executemany('INSERT INTO q1_person_name VALUES (?,?,?)', data_person_name)

作为

c.executemany('INSERT INTO q1_person_name VALUES (null,?,?)', data_person_name)
lmyy7pcs

lmyy7pcs4#

试着这样做:

c.execute('''CREATE TABLE q1_person_name
         (name_id integer primary key AUTOINCREMENT,
          first_name varchar(20) NOT NULL,
          last_name varchar(20) NOT NULL)''')

相关问题