python - 如何使用 Python 将 AUTO INCREMENT 正确设置为 SQLite 中的列?

标签 python python-2.7 sqlite

我一直在尝试使用以下代码:

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 自动递增吗?

最佳答案

在 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')

这是代码示例的输出。

关于python - 如何使用 Python 将 AUTO INCREMENT 正确设置为 SQLite 中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26652393/

相关文章:

python - 类型错误 : not enough arguments for format string in python

python - 如何从 Python 中的父子关系创建 json

python-2.7 - 导入 pyHook 失败

python - 使用 nptdms 获取 channel 名称

python - 对不同大小的 bool 数组进行或运算

python - 删除另一个列表中列表中的第二个值

python - 在 Python 中维护访问计数排序列表的有效方法

安卓一加二 : Failed to change locale for db

c# - 如何使用 SQLite 数据库和 WPF 应用程序存储和检索图像?

android - 如何在sqlite中仅更新列为空?