2009-02-03 16 views
11

Sto usando sqlite con python 2.5. Ottengo un errore sqlite con la sintassi di seguito. Mi sono guardato intorno e ho visto AUTOINCREMENT su questa pagina http://www.sqlite.org/syntaxdiagrams.html#column-constraint ma non ha funzionato. Senza AUTO_INCREMENT la mia tabella può essere creata.AUTO_INCREMENT in sqlite con python

An error occurred: near "AUTO_INCREMENT": syntax error 
CREATE TABLE fileInfo 
(
fileId int NOT NULL AUTO_INCREMENT, 
name varchar(255), 
status int NOT NULL, 
PRIMARY KEY (fileId) 
); 

risposta

38

L'indirizzo è SQLite FAQ. Question #1.

che afferma:

Come faccio a creare un campo AUTOINCREMENT?

Risposta breve: una colonna dichiarata INTEGER PRIMARY KEY sarà autoincremento.

ecco la risposta lunga: se si dichiara una colonna di una tabella per essere INTEGER PRIMARY KEY, quindi ogni volta che si inserisce un NULL in quella colonna della tabella , il NULL è automaticamente convertito in un numero intero che è uno superiore al valore più grande della colonna su tutte le altre righe nella tabella o 1 se la tabella è vuota. (. Se la più grande chiave intera possibile, 9223372036854775807, poi un inutilizzato valore della chiave è scelto a caso) Ad esempio, si supponga di avere una tabella come questo:

CREATE TABLE t1( a INTEGER PRIMARY KEY, b INTEGER); Con questa tabella, il dichiarazione

INSERT INTO t1 VALUES(NULL,123); è logicamente equivale a dire:

INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); v'è una funzione 0.123.516,41 miladenominato sqlite3_last_insert_rowid() che restituirà la chiave intera per l'operazione di inserimento più recente.

Si noti che il numero intero è uno maggiore della chiave più grande che era nella tabella appena prima dell'inserto. La nuova chiave sarà univoca su tutte le chiavi attualmente nella tabella, ma è possibile che si sovrapponga a con chiavi che sono state precedentemente eliminate dalla tabella . Per creare chiavi univoche sulla durata della tabella , aggiungere la parola chiave AUTOINCREMENT alla dichiarazione INTEGER PRIMARY KEY. Quindi il tasto scelto sarà uno in più rispetto alla chiave più grande mai esistita nella tabella . Se la chiave più grande possibile di è esistita in precedenza nella tabella , l'INSERT non riuscirà con un codice di errore SQLITE_FULL.

+3

Mi piace questo tipo di risposte. Dovresti comprimerlo in RTFM :) – lmsasu

5

Si potrebbe provare

CREATE TABLE fileInfo 
(
fileid INTEGER PRIMARY KEY AUTOINCREMENT, 
name STRING, 
status INTEGER NOT NULL 
);
Problemi correlati