Проверка дубликатов при вставке в SQLite - PullRequest
5 голосов
/ 19 июля 2010

Я пытаюсь вставить данные в базу данных SQLite с помощью Python.

INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK")  
    WHERE "UK" NOT EXISTS IN (SELECT LABEL FROM DATA_TABLE);

Этот запрос динамически генерируется из Python, и я проверяю, существует ли дата в таблице перед вставкой, и нетработает в базе данных SQLite.Получение этой near "WHERE": syntax error ошибки.

Я что-то не так делаю?

Спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 19 июля 2010

Это дает вам синтаксическую ошибку, потому что это не допустимый синтаксис .Из вашего примера я предполагаю, что схема, вероятно, выглядит так:

create table data_table (uid integer primary key autoincrement.
     label string);

, в этом случае primary key подразумевает unique.Но, так как вы разрешаете автогенерацию uid, тогда вам все равно, какова ее ценность, вы просто не хотите, чтобы дубликаты label были, и в этом случае вы действительно заботитесь о том, чтобы label был уникальным, поэтому скажите это:

create table data_table (uid integer primary key autoincrement,
     label string unique on conflict fail);

, который затем работает должным образом:

sqlite> insert into data_table (label) values ("uk");
sqlite> insert into data_table (label) values ("uk");
Error: column label is not unique
sqlite> select * from data_table;
1|uk

Кстати, если имена data_table, uid и label не являются примерами имен для целейв этом вопросе вам следует использовать более значимые имена, поскольку они ужасно неинформативны.

2 голосов
/ 19 июля 2010

Я почти уверен, что INSERT не имеет предложения WHERE ( в документации не упоминается ). Что вы можете сделать:

  • создать уникальный индекс для LABEL
  • использовать INSERT OR FAIL
  • если это вызывает ошибку, строка уже существует.
1 голос
/ 19 июля 2010
INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK")  
WHERE NOT EXISTS(SELECT 1 FROM DATA_TABLE WHERE LABEL="UK");

Вы можете использовать это вместо INSERT OR FAIL.

...