2009-02-03 17 views
11

Estoy usando sqlite con python 2.5. Obtengo un error sqlite con la siguiente sintaxis. Miré a mi alrededor y vi AUTOINCREMENT en esta página http://www.sqlite.org/syntaxdiagrams.html#column-constraint pero eso tampoco funcionó. Sin AUTO_INCREMENT mi tabla puede ser creada.AUTO_INCREMENT en el problema 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) 
); 

Respuesta

38

Esto se trata en el SQLite FAQ. Question #1.

que establece:

¿Cómo se crea un campo AutoIncrement ?

Respuesta corta: Una columna declarada INTEGER PRIMARY KEY será autoincrement.

Aquí está la respuesta larga: Si declara una columna de una tabla para ser INTEGER PRIMARY KEY, entonces cada vez que inserta un valor NULL en la columna de la tabla , el NULL es automáticamente convertido en un entero que es uno mayor que el valor más grande de esa columna sobre todas las demás filas en la tabla , o 1 si la tabla está vacía. (. Si la mayor clave entera posible, 9223372036854775807, a continuación, un valor de la clave no utilizado se elige al azar) Para ejemplo, suponga que tiene una tabla como esto:

CREATE TABLE t1( a INTEGER PRIMARY KEY, b INTEGER); Con esta tabla, la declaración

INSERT INTO t1 VALUES(NULL,123); es lógicamente equivalente a decir:

INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); hay una función llamado sqlite3_last_insert_rowid() que devolverá la clave de enteros para la operación de inserción más reciente.

Tenga en cuenta que la clave entera es una mayor que la clave más grande que era en la tabla justo antes de la inserción. La nueva clave será única en todas las claves actualmente en la tabla, pero podría superponerse con claves que han sido previamente eliminadas de la tabla. Para cree claves que sean únicas durante la vigencia de la tabla , agregue la palabra clave AUTOINCREMENT a la declaración INTEGER PRIMARY KEY. Entonces, la clave elegida será una más que la clave más grande que haya existido alguna vez en en esa tabla. Si anteriormente existía la clave más grande posible en esa tabla , entonces INSERT fallará con un código de error SQLITE_FULL.

+3

me gusta este tipo de respuestas. Deberías comprimirlo en RTFM :) – lmsasu

5

Usted podría intentar

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