使用Sqlite,我想将一个自动递增ID列添加到以前没有ID的现有表中:
import sqlite3
db = sqlite3.connect(':memory:')
c = db.cursor()
c.execute('create table events (int weight, text str)')
c.execute('insert into events values(?, ?)', (1371, 'Test1'))
c.execute('insert into events values(?, ?)', (223, 'Test2'))
c.execute('select * from events'); print c.fetchall()
# [(1371, u'Test1'), (223, u'Test2')]
# add an autoincrementing ID to existing table
c.execute('alter table events add id int not null auto_increment primary key')
怎么做得好?我有这个错误:
sqlite3.OperationalError:靠近“auto_increment”:语法错误
答案 0 :(得分:10)
一旦创建了SQLite表,就无法使用alter table以显着的方式对其进行修改。一个常见的流行建议是创建一个包含现有字段的新表以及另外需要的字段,并将数据复制/导入到新字段中,并可选择删除旧数据。
c.execute('create table events_copy(id integer primary key autoincrement, weight integer,str text)')
c.execute('insert into events_copy(weight, str) select weight, str from events')
c.execute('drop table events')
c.execute('alter table events_copy rename to events')
c.commit()