2016-04-25 6 views
2

mit SQLite, ich möchte eine selbstinkrementierende ID-Spalte zu einer vorhandenen Tabelle hinzufügen, die zuvor keine ID hatte:Fügen Sie eine selbstinkrementierende ID-Spalte in eine vorhandene Tabelle mit 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') 

Wie es richtig machen ? Ich habe diesen Fehler:

sqlite3.OperationalError: near "auto_increment": syntax error

Antwort

4

Eine SQLite-Tabelle in signifikanter Weise mit alten table nicht geändert können, sobald sie erstellt wurde. Ein gemeinsamer beliebter Vorschlag ist eine neue Tabelle mit den bestehenden Feldern zu schaffen sowie das zusätzlich benötigte Feld und kopieren/Ihre Daten in die neuen importieren und gegebenenfalls die alten löscht.

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

Wenn die Tabelle mit der großen Anzahl von Zeilen (wie meine> 1 mln) 'VACUUM' Anweisung verwenden, um Cache loszuwerden. –

Verwandte Themen