我一直在尝试使用以下代码:
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
# -*- coding: utf-8 -*-
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 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')
这是代码示例的输出。
在SQLite中, INTEGER PRIMARY KEY
列自动递增。还有一个 AUTOINCREMENT
关键词。用于 INTEGER PRIMARY KEY AUTOINCREMENT
, 一个
使用稍微不同的Id创建算法。
#!/usr/bin/python
# -*- coding: utf-8 -*-
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 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')
这是代码示例的输出。
试试这样:
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)''')
看来你已经做到了。因此,插入时无需引用该字段。
INSERT INTO q1_person_name (first_name, last_name) VALUES (?,?)
替换第一个 ?
在 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)