2016-04-25 57 views
2

使用SQLite,我想一个自动增量ID列添加到了以前没有ID的现有表:的自增ID列到现有的表添加使用SQLite

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: near "auto_increment": syntax error

回答

4

一个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() 
+0

如果具有大量行(如my> 1 mln)的表使用'VACUUM'语句来摆脱缓存。 –