CSV-Datei in SQLite3 Datenbank importieren
Schauen wir uns den Inhalt einer CSV-Datei an. Meistens liegen uns Daten in Excel vor. In Excel kann der Export direkt in eine CSV-Datei exportiert werden:

Der Export aus Excel wird über:
Datei -> Speichern unter -> Dateiformat

Wir erhalten dann eine Textdatei, deren Datenfelder der Semikolons getrennt sind:
nachname;vorname;geburtstag
Müller;Mike;05.03.80
Sommer;Elke;02.05.87
Schuster;Johanna;10.10.93
Trister;Theodor;08.03.87
Und die CSV-Datei über Python ausgelesen und angezeigt:
import csv
with open("adressen.csv") as csvdatei:
csv_reader_object = csv.reader(csvdatei, delimiter=';')
for row in csv_reader_object:
print(row)
Als Ergebnis erhalten wir die Daten als Datentyp "Liste":
['ufeffnachname', 'vorname', 'geburtstag']
['Müller', 'Mike', '05.03.80']
['Sommer', 'Elke', '02.05.87']
['Schuster', 'Johanna', '10.10.93']
['Trister', 'Theodor', '08.03.87']
Die ersten Zeichen 'ufeff' kommen daher, dass wir in der entsprechenden UTF8-Variante abgespeichert haben. Da wir die Überschriften nicht benötigt, kann man diesen kleinen Schönheitsfehler ignorieren und diese erste Zeile mit den Überschriften einfach mit einem Texteditor aus der CSV-Datei löschen. Dann passt alles beim richtigen Import.
Jetzt wollen wir eine Verbindung zur Datenbank „adressen.db“ aufbauen und diese gegebenenfalls neu anlegen, falls diese noch nicht existiert:
import csv
import sqlite3
verbindung = sqlite3.connect("adressen.db")
zeiger = verbindung.cursor()
sql_anweisung = """
CREATE TABLE IF NOT EXISTS adressen (
nachname VARCHAR(30),
vorname VARCHAR(20),
geburtstag DATE
);"""
zeiger.execute(sql_anweisung)
with open("adressen.csv") as csvdatei:
csv_reader_object = csv.reader(csvdatei, delimiter=';')
for row in csv_reader_object:
print(row)
Ab jetzt können wir unsere SQLite3 Datenbank befüllen. Wir benötigen die entsprechende SQL-Anweisung:
import csv
import sqlite3
verbindung = sqlite3.connect("adressen.db")
zeiger = verbindung.cursor()
sql_anweisung = """
CREATE TABLE IF NOT EXISTS adressen (
nachname VARCHAR(30),
vorname VARCHAR(20),
geburtstag DATE
);"""
zeiger.execute(sql_anweisung)
sql_anweisung = """
INSERT INTO adressen (nachname, vorname, geburtstag)
VALUES (:nachname, :vorname, :geburtstag)
"""
with open("adressen.csv") as csvdatei:
csv_reader_object = csv.reader(csvdatei, delimiter=';')
with sqlite3.connect("adressen.db") as verbindung:
zeiger = verbindung.cursor()
zeiger.executemany(sql_anweisung, csv_reader_object)
Und zum Test können wir jetzt die Datenbank auslesen und den Inhalt anzeigen:
import sqlite3
verbindung = sqlite3.connect("adressen.db")
zeiger = verbindung.cursor()
zeiger.execute("SELECT * FROM adressen")
inhalt = zeiger.fetchall()
print(inhalt)
verbindung.close()
Wir haben alle Daten auf einen Rutsch in unsere SQLite3-Datenbank importiert und können damit weiterarbeiten.
So kann man schnell SQLite-Datenbanken mit Inhalt füllen.