2017-02-22 29 views
0

先ず、私が尋ねる質問ではあまりにも基本的なことを謝ります - 私は非常に多くのSQLite初心者が足を濡らし、Pythonで簡単な作業を達成しようとしていますおよびSQLite3。SQLite3 - データベースに重複したエントリが入るのを防ぐ

私は2つのテキストフィールド:language_codeusernameを持つSQLiteデータベースファイル(notify_users)を持っています。私は、例えば、これはデータベースに情報を入力するためのコードを実行使用しています。:cursor.execute("INSERT INTO notify_users VALUES ('de', 'jane_doe')")を:

可視化し、その後、データベースは次のようになります。

| language_code | username  | 
--------------------------------- 
| de   | jane_doe  | 
| sv   | jane_doe  | 
| de   | tom_petty  | 

のように。 1つのユーザー名が複数のlanguage_codesに関連付けられても構いませんが、と同じ言語コードの両方が重複しないようにしたいと思います。すでに存在するものとして、両方のフィールドにまったく同じになるだろう場合

どのように私はINSERT INTOコードを変更する必要があり、それは、新しいエントリを作成しないするように?

| language_code | username  | 
--------------------------------- 
| de   | jane_doe  | 
| de   | jane_doe  | X # Don't want this duplicate entry to be entered. 

ありがとうございます。この質問について、より正確または具体的にするためにできることがあれば教えてください。

答えて

2

データベースに作業をさせます。一意のインデックスを作成します。これにより、そのような重複が防止されます。

create unique index unq_notify_users_2 on notify_users(language_code, username); 

エラーを生成することによって重複を防止します。

insert into notify_users(language_code, username) 
    select language_code, username 
    from (select $language_code as language_code, $username as username) lu 
    where not exists (select 1 
         from notify_users nu 
         where nu.language_code = lu.language_code and 
          nu.username = lu.username 
        ); 
+0

ありがとう、ゴードン - 私はこれを実行する別のコマンドですか?これは、データベースのチェックを行うのが最善です。 (私の無知を許しなさい!) –

+0

@ JohnSmith。 。 。 'create index'はあなたがデータベースで一度やっていることです。 'insert'はデータを挿入する方法の例です。 –

関連する問題