SQLite CSV Import
Manchmal kommt es vor, dass man den inhalt einer CSV-Datei in eine SQLite-DB importieren möchte um darin z.B. besser suchen zu können oder die Daten an sich als Datenbank statt eines Flatfiles vorliegen haben möchte.
Ich habe hierzu mal als Beispiel eine Banale CSV-Datei mit den Wochentagen:
wochentage.csv:
"id","Wochentag","Abk"
1,"Montag","Mo"
2,"Dienstag","Di"
3,"Mittwoch","Mi"
4,"Donnerstag","Do"
5,"Freitag","Fr"
6,"Samstag","Sa"
7,"Sonntag","So"
Diese können wir mit folgenden Befehl in eine Tabelle einer SQLite-Datenbank einlesen.
Praktischerweise erstellt SQLite hierfür auch schon eine Tabellenstruktur innerhalb der Datenbank.
$# sqlite3 data.db3 ".import --csv wochentage.csv wochentage"
Lassen wir uns nun den Inhalt der Tabelle wochentage ausgeben, erhalten wir 1:1 den Inhalt der CSV-Datei als Tabelle in der SQLite-Datenbank.
$# sqlite3 data.db3 "select * from wochentage"
1|Montag|Mo
2|Dienstag|Di
3|Mittwoch|Mi
4|Donnerstag|Do
5|Freitag|Fr
6|Samstag|Sa
7|Sonntag|So
Hierbei ist zu beachten das SQLite beim CSV-Import für die Ziel-Tabelle nur Spalten mit dem Datentyp TEXT angelegt hat.
Ausgeben des Tabellen-Schemas für die Tabelle wochentage:
$# sqlite3 data.db3 ".schema wochentage"
CREATE TABLE IF NOT EXISTS "wochentage"(
"id" TEXT, "Wochentag" TEXT, "Abk" TEXT);
Möchte man z.B. die erste Spalte als Datentyp INTEGER in der Tabelle haben, so muss man diese vor dem CSV-Import erst anlegen.
Nachdem die Tabelle erstellt ist, kann man den CSV-Import dann in die vorher angelegte Tabelle einfügen.
$# sqlite3 data.db3 "CREATE TABLE IF NOT EXISTS wochentage(id INTEGER, Wochentag TEXT, Abk TEXT);"
Nun bekommen wir in der Tabellenstruktur den korrekten Datentyp zurück:
$# sqlite3 data.db3 ".schema wochentage"
CREATE TABLE wochentage(id INTEGER, Wochentag TEXT, Abk TEXT);
Alles zusammen würde dann wie folgt aussehen:
$# sqlite3 data.db3 "CREATE TABLE IF NOT EXISTS wochentage(id INTEGER, Wochentag TEXT, Abk TEXT);"
$# sqlite3 data.db3 ".import --csv wochentage.csv wochentage"
$# sqlite3 data.db3 "select * from wochentage"
1|Montag|Mo
2|Dienstag|Di
3|Mittwoch|Mi
4|Donnerstag|Do
5|Freitag|Fr
6|Samstag|Sa
7|Sonntag|So