Проверка дубликатов при вставке в 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.

Я делаю что-то неправильно ?

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


person ukanth    schedule 19.07.2010    source источник


Ответы (3)



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

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 не являются примерами имен для целей этого вопроса, вам следует использовать более осмысленные имена, поскольку они ужасно неинформативны.

person msw    schedule 19.07.2010
comment
Спасибо @msw, это правда. имена - это просто пример, я использую метку как уникальную. - person ukanth; 20.07.2010

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

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

person user396159    schedule 19.07.2010