Seite 1 von 1

sqlite INSERT nur wenn Eintrag in Tabelle noch nicht existiert

Verfasst: Sonntag 5. März 2023, 18:05
von mhard666
Hallo allerseits,

ich befasse mich erstmals mit der Verwendung von Datenbanken - konkret sqlite3 - in Python. Sorry, wenn die Frage zu banal sein sollte...

Ich möchte den Inhalt einer verschachtelten Liste in eine Tabelle einer sqlite3-DB importieren. Format der Listen:

[('bla', 'blubb', 'IP-Adresse', 'Kommentar'), ('bla', 'blubb', 'nächste IP-Adresse', 'Kommentar'),...]

Die Felder bla und blubb brauche ich nicht in der Datenbank. Die IP-Adresse soll nur einmal in der Datenbank vorhanden sein. Das heißt, wenn die IP-Adresse schon mal in die DB geschrieben wurde, soll sie nicht mehr importiert werden.

Aktuell denke ich darüber nach, die Tabelle auszulesen (das Feld mit der IP-Adresse genügt ja), und dann jeden zu importierenden Eintrag gegen die Liste mit den ausgelesenen Adressen zu prüfen. Ist er nicht enthalten, werden IP-Adresse und Kommentar in die DB geschrieben.

Geht das vielleicht auch einfacher?

Danke.

VG mhard666

Re: sqlite INSERT nur wenn Eintrag in Tabelle noch nicht existiert

Verfasst: Sonntag 5. März 2023, 19:54
von Sirius3
Du hast keine verschachtelte Liste, sondern eine Liste mit Tuple (was ja auch ganz passend ist).
Datenbanken kennen unique-constraints (https://www.sqlite.org/lang_createtable ... onstraints) um zu verhindern, dass mehrere Einträge mit gleichem Inhalt geschrieben werden können. Das mußt Du also nicht selbst implementieren.

Re: sqlite INSERT nur wenn Eintrag in Tabelle noch nicht existiert

Verfasst: Montag 6. März 2023, 19:04
von mhard666
Hallo Sirius3,

hat funktioniert (wenn man das richtige SQL-Statement weiß):

Code: Alles auswählen

    cursor.execute("""
                        INSERT OR IGNORE INTO ip_addresses (str_address, comment)
                        VALUES (?,?)
                        """, 
                        (address, comment)
    )
Danke.

VG mhard666