6

Pythonを使用してSQLiteデータベースにデータを挿入しようとしています。

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エラーが発生します。

私は何か間違ったことをしていますか?

ご協力いただきありがとうございます。

4

3 に答える 3

2

私はそれが条項INSERTを持っていないことをかなり確信しています(ドキュメントは何も言及していません)。あなたができること:WHERE

  • に一意のインデックスを作成するLABEL
  • 使用するINSERT OR FAIL
  • それがエラーをトリガーする場合、その行はすでに存在しています。
于 2010-07-19T14:14:38.683 に答える
2

構文が許可されていないため、構文エラーが発生します。あなたの例から、スキーマはおそらく次のようになっていると思います。

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およびuidlabelこの質問の目的の名前の例ではない場合、これらはひどく有益ではないため、より意味のある名前を使用する必要があります。

于 2010-07-19T14:35:12.513 に答える
1
INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK")  
WHERE NOT EXISTS(SELECT 1 FROM DATA_TABLE WHERE LABEL="UK");

INSERTORFAILの代わりにこれを使用できます。

于 2010-07-19T19:42:11.600 に答える