Проверка дубликата при вставке в SQLite

Я пытаюсь вставить данные в базу данных 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 ошибка.

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

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

5
задан ukanth 19 July 2010 в 14:09
поделиться

3 ответа

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

  • создать уникальный индекс для LABEL
  • использовать INSERT OR FAIL
  • , если это вызывает ошибку, строка уже существует.
2
ответ дан 14 December 2019 в 18:54
поделиться

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

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

, и в этом случае первичный ключ подразумевает уникальный . Но поскольку вы разрешаете автоматическое создание uid , вам все равно, какое это значение, вам просто не нужно дублировать метки 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
ответ дан 14 December 2019 в 18:54
поделиться
INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK")  
WHERE NOT EXISTS(SELECT 1 FROM DATA_TABLE WHERE LABEL="UK");

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

1
ответ дан 14 December 2019 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: