AUTO_INCREMENT в sqlite проблема с питоном - PullRequest
11 голосов
/ 03 февраля 2009

Я использую sqlite с python 2.5. Я получаю ошибку sqlite с синтаксисом ниже. Я оглянулся и увидел AUTOINCREMENT на этой странице http://www.sqlite.org/syntaxdiagrams.html#column-constraint, но это тоже не сработало. Без AUTO_INCREMENT моя таблица может быть создана.

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)
);

Ответы [ 4 ]

40 голосов
/ 03 февраля 2009

Об этом говорится в FAQ по SQLite . Вопрос № 1 .

Который гласит:

Как мне создать AUTOINCREMENT поле

Краткий ответ: столбец объявлен INTEGER PRIMARY KEY будет автоинкремент.

Вот длинный ответ: если вы объявить столбец таблицы как INTEGER PRIMARY KEY, тогда всякий раз, когда вы вставить NULL в этот столбец таблица, NULL автоматически превращается в целое число, которое является одним больше, чем наибольшее значение этого столбец над всеми другими строками в table, или 1, если таблица пуста. (Если максимально возможный целочисленный ключ, 9223372036854775807, затем неиспользованный Значение ключа выбирается случайным образом.) Для Например, предположим, у вас есть таблица, как это:

CREATE TABLE t1( a INTEGER PRIMARY KEY, b INTEGER ); С этой таблицей заявление

INSERT INTO t1 VALUES(NULL,123); является логически эквивалентно высказыванию:

INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); Есть функция по имени sqlite3_last_insert_rowid() который вернет целочисленный ключ для самая последняя операция вставки.

Обратите внимание, что целочисленный ключ больше, чем самый большой ключ, который был в таблице непосредственно перед вставкой. Новый ключ будет уникальным во всем ключи в данный момент в таблице, но это может совпадать с ключами, которые были ранее удалены из таблицы. к создавать ключи, которые являются уникальными по время жизни таблицы, добавить AUTOINCREMENT ключевое слово для INTEGER ПЕРВИЧНАЯ КЛЮЧЕВАЯ декларация. Тогда ключ выбрано будет на один больше чем самый большой ключ, который когда-либо существовал в этот стол. Если возможно ключ ранее существовал в этом таблица, то вставка не удастся с код ошибки SQLITE_FULL.

10 голосов
/ 03 февраля 2009

Похоже, что AUTO_INCREMENT должно быть AUTOINCREMENT см. http://www.sqlite.org/syntaxdiagrams.html#column-constraint

5 голосов
/ 03 февраля 2009

Вы можете попробовать

CREATE TABLE fileInfo
(
fileid INTEGER PRIMARY KEY AUTOINCREMENT,
name STRING,
status INTEGER NOT NULL
);
0 голосов
/ 01 декабря 2018

Мы только что изменили заказ с

NOT NULL, AUTO_INCREMENT 

до

AUTO_INCREMENT NOT NULL,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...