CSV mit Python in Datenbank schreiben

Max-Berater

Erfahrenes Mitglied
Nach längerer Pause möchte ich das Thema wieder aufgreifen.

Verbindung zur Datenbank per mysql.connector habe ich ich bereits hergestellt und suche aktuell eine Möglichkeit, eine CSV in eine bestehende Datenbank einzuspielen. Bis dato habe ich dieses immer in HEIDI SQL erledigt, was prima klappte.

Finde jedoch hierzu irgendwie nichts im Netz, was mich weiterbringt, die CSV per Python in die Datenbank zu schreiben.
 

Max-Berater

Erfahrenes Mitglied
Vielen Dank, ich habe mich ein wenig eingearbeitet. Daten in Datenbank schreiben klappt soweit, aber nicht aus einer externen CSV-Datei. Ich finde hierzu auch nicht den richtigen Ansatz das umzusetzen.
 

Sempervivum

Erfahrenes Mitglied
Du brauchst die beiden Bestandteile nur zusammen zu fügen. Das Beispiel von #2 ist praktisch schon gebrauchsfertig. Beim Schreiben in die Datenbank empfehle ich aus Gründen der Lesbarkeit, das Verfahren mit benannten Platzhaltern zu verwenden, d. h. in dem Beispiel das mit "salary":
Code:
import csv
with open('dein-dateiname.csv', newline='') as csvfile:
    csvreader = csv.reader(csvfile, delimiter=',', quotechar='|')

    # Zugriff auf DB vorbereiten:
    cnx = mysql.connector.connect(user='scott', database='employees')
    cursor = cnx.cursor()
    for row in scvreader:
        # jetzt steht dir eine Zeile aus der CSV-Datei in der Variablen row zur Verfügung

        # SQL bereit stellen:
        sql = ("INSERT INTO tabellenname "
              "(col1, col2, col3, col4) "
              "VALUES (%(val1)s, %(val2)s, %(val3)s, %(val3)s)")
        # Daten bereit stellen:
        data = {  'val1': row[0],  'val2': row[1],  'val3': row[2],  'val4': row[3] }
        # Eintragen in die DB ausführen:
        cursor.execute(sql, data);
    cnx.commit()
    cursor.close()
    cnx.close()
Ungetestet, Du musst es natürlich an deine Tabelle anpassen.
 

Max-Berater

Erfahrenes Mitglied
Vielen Dank, ich hänge gerade an folgenden Befehlen

15: cursor = cnx.cursor()
16: for row in scvreader:

Ich denke, es sollte csvreader heissen. Aber auch wenn ich das verbessere, bekommei ich eine Fehlermeldung

File "C:\Users\xxxxx\PycharmProjects\xxxxxxxx\tutorials.py", line 16
for row in csvreader:
IndentationError: unexpected indent

Process finished with exit code 1
 

Sempervivum

Erfahrenes Mitglied
Ich habe den Code jetzt auch mit einer Testtabelle getestet und er funktioniert einwandfrei. Allerdings musste ich den Connector für MariaDB verwenden.