SQLite3 - 防止重复的条目被输入到数据库中
问题描述:
首先,在我问的问题中提前道歉太过分 - 我是一个SQLite初学者,只是让自己的脚湿了,试图用Python完成一项简单的任务和SQLite3。SQLite3 - 防止重复的条目被输入到数据库中
我有一个SQLite数据库文件(notify_users
)有两个文本字段:language_code
和username
。我使用这个执行代码将信息输入到数据库中,例如: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
);
谢谢,戈登 - 这是一个单独的命令,我运行? (原谅我的无知!) –
@约翰史密斯。 。 。 'create index'是你在数据库中做的一次,一次。 'insert'是你如何插入数据的例子。 –