首先,在我提出的问题中提前道歉是太基本了 - 我非常喜欢SQLite新手,只是试着用Python和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.
谢谢,如果我能做些什么来更准确或更具体地解决这个问题,请告诉我。
答案 0 :(得分: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
);