2017-02-22 7 views
0

Als Erstes entschuldige ich mich im Vorhinein in der Frage, die ich stelle - ich bin sehr ein SQLite Neophyt, der nur seine Füße nass macht und versucht, eine einfache Aufgabe mit Python zu erledigen und SQLite3.SQLite3 - Verhindern, dass doppelte Einträge in eine Datenbank eingegeben werden

Ich habe eine SQLite-Datenbank-Datei (notify_users) mit zwei Textfeldern: language_code und username. Ich verwende diesen Code ausführen Informationen in die Datenbank einzugeben, z.B .: cursor.execute("INSERT INTO notify_users VALUES ('de', 'jane_doe')"):

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

und so weiter:

Visualized, dann wird die Datenbank wie folgt aussieht. Es ist zwar in Ordnung, wenn ein Benutzername mit mehreren language_codes verknüpft ist, aber ich möchte verhindern, dass ein doppelter Eintrag sowohl mit dem same language_code als auch mit dem Benutzernamen erfolgt.

Wie soll ich ändern Sie den INSERT INTO Code, so dass es nicht einen neuen Eintrag machen, wenn es genau das gleiche in beiden Feldern als eine, die bereits vorhanden sein wird?

| language_code | username  | 
--------------------------------- 
| de   | jane_doe  | 
| de   | jane_doe  | X # Don't want this duplicate entry to be entered. 

Danke, und lassen Sie es mich wissen, wenn etwas gibt, was ich tun kann präzisere oder spezifische über diese Frage zu sein.

Antwort

2

Lassen Sie die Datenbank die Arbeit erledigen. Erstellen Sie einen eindeutigen Index. Dies verhindert eine solche Duplizierung:

Es verhindert die Duplizierung durch Generieren eines Fehlers. Obwohl es am besten ist, die Überprüfung in der Datenbank zu tun, können Sie den Fehler vermeiden, indem Sie so etwas tun:

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

Danke, Gordon - ist das ein separater Befehl, den ich ausführen? (Verzeihen Sie meine Unwissenheit!) –

+0

@JohnSmith. . . 'create index' ist etwas, was Sie einmal in der Datenbank tun. Die 'Einfügung' ist ein Beispiel dafür, wie Sie Daten einfügen können. –

Verwandte Themen