SQLite3 - 防止重复的条目被输入到数据库中

问题描述:

首先,在我问的问题中提前道歉太过分 - 我是一个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. 

谢谢,请让我知道,如果有什么我可以做的更准确或更具体的这个问题。

让数据库完成这项工作。创建一个唯一的索引。这将防止这种重复:

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'是你如何插入数据的例子。 –