SQLite3 - 防止将重复条目输入数据库

时间:2017-02-22 01:59:25

标签: python database python-3.x sqlite

首先,在我提出的问题中提前道歉是太基本了 - 我非常喜欢SQLite新手,只是试着用Python和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. 

谢谢,如果我能做些什么来更准确或更具体地解决这个问题,请告诉我。

1 个答案:

答案 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
                     );