Eine Konstante CONNECTION, die immer None ist, ist nicht sehr sinnvoll. Vor allem das Prüfen in einer Exception, macht dann auch keinen Sinn; übrigens, die Klammern dort sind überflüssig. Apropos Fehlerbehandlung, die ist an der Stelle komplett unsinnig und kann ersatzlos gelöscht werden, die sorgt nur dafür, dass sinnvolle Meldungen unterdrückt werden und das Programm zwei Zeilen später mit einer schwer verständlichen Fehlermeldung trotzdem abstürzt.
Eine ID ist ja deshalb ein Primary Key, weil er eindeutig sein mußt und deshalb meist von der Datenbank selbst vergeben, wenn man den also händisch setzt, ist das mit der Eindeutigkeit unter umständen ein Problem. Bei INSERT auch immer die konkreten Spaltennamen angeben.
Ein executemany-Aufruf mit nur einem Element ist falsch.
Tabellennamen sollten eigentlich etwas fixes sein und nicht variabel.
Im Dokstring sollte stehen, was die Funktion tut, und nicht nochmal der Programmcode in Worten.
Dass Daten irgendwann gelesen wurden, ist nicht relevant, das "gelesen" in `read_data` bietet also keinen Mehrwert, weil die Funktion genausogut mit zufällig erzeugten Daten funktionieren würde. Der Inhalt ist relevant: `edelmetallpreise`.
Bitte keine Abkürzungen, wenn man getreidepreis meint, sollte man das auch schreiben und nicht gpreis.
Code: Alles auswählen
def csvdata_to_db(db_path, edelmetallpreise):
""" Trägt die Daten edelmetallpreise in die Datenbank """
connection = sqlite3.connect(db_path)
cursor = connection.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS edelmetallpreise (id INT PRIMARY KEY, gold DECIMAL, palladium DECIMAL, datum DATE)")
for dataset in edelmetallpreise:
gold_preis = parse_decimal(dataset['gold'], locale='en')
palladium_preis = parse_decimal(dataset['palladium'], locale='en')
datum = parse(dataset['datum'])
cursor.execute("INSERT INTO edelmetallpreise (gold, palladium, datum) VALUES (?,?,?)",(gold_preis, palladium_preis, datum))
connection.commit()
connection.close()
print (f"Die DB {db_path} wurde mit der Tabelle edelmetallpreise samt Daten erfolgreich angelegt.")