2017-02-22 129 views
0

首先,在我問的問題中提前道歉太過分 - 我是一個SQLite初學者,只是讓自己的腳溼了,試圖用Python完成一項簡單的任務和SQLite3。SQLite3 - 防止重複的條目被輸入到數據庫中

我有一個SQLite數據庫文件(notify_users)有兩個文本字段:language_codeusername。我使用這個執行代碼將信息輸入到數據庫中,例如:cursor.execute("INSERT INTO notify_users VALUES ('de', 'jane_doe')")

可視化,那麼,該數據庫是這樣的:

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

等。儘管可以將一個用戶名與多個language_codes關聯,但我想要防止重複條目相同的language_code和用戶名

我應該如何更改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

@約翰史密斯。 。 。 'create index'是你在數據庫中做的一次,一次。 'insert'是你如何插入數據的例子。 –