Я пытаюсь вставить данные в базу данных 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
ошибка.
Я делаю что-то не так?
Спасибо за помощь.
Я почти уверен, что INSERT
не имеет предложения WHERE
( в документации ничего не упоминается ). Что вы можете сделать:
LABEL
INSERT OR FAIL
Это выдает синтаксическую ошибку, потому что это недопустимый синтаксис . Из вашего примера я предполагаю, что схема, вероятно, следующая:
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
не являются примерами имен для целей этого вопроса, тогда вам следует использовать более значимые имена, поскольку они ужасно неинформативны.
INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK")
WHERE NOT EXISTS(SELECT 1 FROM DATA_TABLE WHERE LABEL="UK");
вы можете использовать это вместо INSERT OR FAIL.