2016-04-25 58 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'語句來擺脫緩存。 –