CSV Datei in SQLite3 DB kopieren 4411

Das Programm soll Daten aus einer .CSV Datei lesen und diese in eine SQLite3 Datenbank schreiben.

Als CSV Datei nutzen wir eine Datei mit allen deutschen Wörtern, die in Wikipedia vorkommen. Auf der Webseite Bri´s World von Torsten Brischalle kann diese .CSV Datei mit über 2 Millionen Zeilen heruntergeladen werden. Als Alternative gibt es noch eine Testdatei mit nur 100 Wörtern :

1) Daten aus einer .CSV Datei auslesen

Folgendes Programm liest alle Zeilen einer .CSV Datei aus und schreibt deren Inhalt mit der print-Funktion in die Konsole. Das Python-Programm muss im gleichen Ordner wie die .CSV Datei liegen.

#Modul für die Arbeit mit .CSV Dateien laden
import csv

#öffnet die .CSV Datei
a_file = open("100_Woerter.csv", encoding="utf8")
#speichert den Inhalt der Datei in einem rows Object
rows = csv.reader(a_file)

#iteriert durch alle Zeilen des rows Object
for row in rows:
    #gibt das erste Wort der Zeile zurück
    #als Standardtrenner wird nach "," gesucht
    print(row[0])

2) SQLite Datenbank für die Wörter erstellen

Die über zwei Millionen Wörter sollen in eine SQLite Datenbank kopiert werden. Eine SQLite Datenbank kann man am einfachsten mit dem von Benjamin Vötterle und mir erstellten Tool SQLverine erstellen. Dazu nutzt man das Autorenwerkzeug und erstellt eine neue Datenbank mit folgendem Aufbau:

Create Befehl der Datenbank

Die neu erstellte leere Datenbank kann dann heruntergeladen werden.

3) Daten der .CSV Datei in die Datenbank kopieren

Das ist nun unser finales Programm, welches die Daten aus der .CSV Datei ausliest und mit Hilfe des „sqlite3“ Moduls eine Verbindung zur Datenbank aufbaut und mit der executemany-Funktion die einzelnen Zeilen in die Datenbank schreibt:

import sqlite3
import csv

print("Start der Datenübertragung...")

#Verbindung mit der Datenbank wird aufgebaut
con = sqlite3.connect("2Mio_Woerter.db")
#Cursor Object wird erstellt um Befehle ausführen zu können
cur = con.cursor()

#liest den Inhalt der CSV Datei und speichert diesen in einem rows Object
a_file = open("2Mio_Woerter.csv", encoding="utf8")
rows = csv.reader(a_file)

#Der Cursor führt mehrere Befehle aus
cur.executemany("INSERT INTO woerter (wort) VALUES (?)", rows)

#speichert die Anpassungen
con.commit()
#schließt die Verbindung zur Datenbank
con.close()

print("Daten übertragen")

Das Übertragen der über zwei Millionen Wörter dauert nur ca. 5 Sekunden. Die Datenbank hat im Anschluss eine Größe von ca. 53 Megabyte.

Links