CSV-zu-SQLkonverter

Anleitung · 8 Min. Lesezeit

CSV in SQLite importieren: INSERT-Statements und .import im Vergleich

CSV in SQLite importieren: der ehrliche Vergleich von .import in der sqlite3-Shell und generierten INSERT-Statements. Mit Schritt-für-Schritt-Anleitung, Typ-Hinweisen und einem Weg ganz ohne Installation, kostenlos und ohne Upload.

Jan-Tristan Rudat
Jan-Tristan Rudat Veröffentlicht Geprüft

Kurz gesagt

Um eine CSV in SQLite zu importieren, haben Sie zwei gute Wege. Der .import-Befehl der sqlite3-Kommandozeile liest die Datei direkt ein und ist auch bei großen Dateien schnell, behandelt aber zunächst alles als Text. INSERT-Statements sind reines SQL, laufen in jedem Werkzeug und machen Datentypen und NULL-Werte explizit. Wer keine Installation will, generiert CREATE TABLE plus INSERT im Browser, lokal und ohne Upload, und führt sie dann in seiner SQLite-Datenbank aus.

Warum SQLite besonders einfach ist

SQLite unterscheidet sich von Datenbanken wie MySQL oder PostgreSQL in einem wichtigen Punkt: Es gibt keinen Server, der laufen muss, und keine Benutzerverwaltung. Eine SQLite-Datenbank ist schlicht eine einzige Datei auf Ihrer Festplatte, typischerweise mit der Endung .db oder .sqlite. Genau deshalb ist SQLite so beliebt für lokale Anwendungen, kleine Projekte, mobile Apps und alles, wo man schnell eine Datenbank braucht, ohne erst Infrastruktur aufzusetzen.

Wenn Sie also eine CSV in SQLite importieren wollen, ist die Einstiegshürde niedrig. Sie brauchen weder Zugangsdaten noch eine Netzwerkverbindung. Es genügt, die CSV-Daten in eine Tabelle dieser einen Datei zu schreiben. Die Frage ist nur, auf welchem Weg, und genau das macht den Unterschied zwischen einem sauberen Schema und einer Tabelle, in der nachher alles als Text liegt.

Eine Besonderheit sollten Sie von Anfang an kennen: SQLite hat ein dynamisches Typsystem. Während andere Datenbanken streng prüfen, ob ein Wert wirklich eine Ganzzahl ist, behandelt SQLite den deklarierten Spaltentyp eher als Empfehlung. Das macht den CSV-Import nachsichtiger, kann aber auch dazu führen, dass Typen nicht so streng sind, wie Sie es erwarten. Wer die Grundlagen dazu auffrischen möchte, findet sie im Ratgeber CSV in SQL umwandeln.

Zwei Wege: .import und INSERT-Statements

Für den SQLite CSV Import haben sich zwei Verfahren etabliert, die beide ihre Berechtigung haben. Welches besser passt, hängt davon ab, womit Sie arbeiten und wie viel Kontrolle Sie über die Datentypen brauchen.

Der erste Weg ist der eingebaute Befehl .import der sqlite3-Kommandozeile. Er liest eine CSV-Datei direkt in eine Tabelle ein, ohne dass Sie für jede Zeile ein eigenes Statement schreiben. Das ist schnell und unkompliziert, setzt aber voraus, dass Sie das Kommandozeilen-Tool sqlite3 installiert haben und mit der Shell arbeiten möchten.

Der zweite Weg sind INSERT-Statements: reines SQL, das aus jeder CSV-Zeile eine Anweisung INSERT INTO ... VALUES (...) macht, ergänzt um ein passendes CREATE TABLE. Dieser Weg ist universell, denn solches SQL läuft in der sqlite3-Shell genauso wie in grafischen Programmen wie DB Browser for SQLite oder in jeder Programmiersprache, die SQLite ansprechen kann. Außerdem legen Sie damit Datentypen und NULL-Werte ausdrücklich fest. Wie genau die einzelnen Datenzeilen dabei entstehen, beschreibt der Ratgeber INSERT-Statements aus CSV erzeugen.

Weg 1: CSV per .import einlesen

Der .import-Befehl ist der schnellste Weg, wenn Sie ohnehin mit der Kommandozeile arbeiten. Sie starten die Shell mit Ihrer Datenbankdatei und schalten in den CSV-Modus. Eine typische Sitzung sieht so aus:

sqlite3 meine_datenbank.db
sqlite> .mode csv
sqlite> .import --skip 1 kunden.csv kunden
sqlite> SELECT count(*) FROM kunden;

Mit .mode csv sagen Sie SQLite, dass die folgende Eingabe eine CSV ist. Der Befehl .import liest dann die Datei kunden.csv in die Tabelle kunden. Die Option --skip 1 überspringt die Kopfzeile, wenn die Tabelle bereits existiert. Existiert die Tabelle noch nicht, verhält sich .import anders: Es legt die Tabelle automatisch an und verwendet die erste Zeile der CSV als Spaltennamen. In diesem Fall lassen Sie --skip 1 weg.

Genau hier liegt der wichtigste Haken: Legt .import die Tabelle selbst an, bekommen alle Spalten den Typ TEXT, weil eine CSV keine Typinformation mitbringt. Wegen des dynamischen Typsystems von SQLite lassen sich Zahlen darin oft trotzdem verwenden, sauber ist es aber nicht. Wenn Sie korrekte Typen wollen, legen Sie die Tabelle vorher mit CREATE TABLE an:

CREATE TABLE "kunden" (
  "id" INTEGER,
  "name" TEXT,
  "umsatz" REAL,
  "registriert" TEXT
);

Nutzt deutsches Excel als Trennzeichen ein Semikolon, stellen Sie es vor dem Import um: .separator ";". Sonst landet die ganze Zeile in einer einzigen Spalte. Dieses Trennzeichen-Problem ist so verbreitet, dass es einen eigenen Ratgeber wert ist: CSV mit Semikolon in SQL.

Weg 2: CSV über INSERT-Statements

Der zweite Weg erzeugt aus der CSV ein vollständiges SQL-Skript: zuerst ein CREATE TABLE mit passenden Datentypen, danach für jede Datenzeile ein INSERT. Der Vorteil ist, dass dieses Skript überall läuft, wo SQLite verfügbar ist, also auch in grafischen Werkzeugen oder per Programmcode. Für unser Beispiel könnte das Ergebnis so aussehen:

CREATE TABLE "kunden" (
  "id" INTEGER NOT NULL,
  "name" TEXT NOT NULL,
  "umsatz" REAL NOT NULL,
  "registriert" TEXT NOT NULL
);

INSERT INTO "kunden" ("id", "name", "umsatz", "registriert") VALUES
(1, 'Müller GmbH', 1299.90, '2024-01-15'),
(2, 'Schmidt KG', 499.00, '2024-03-02'),
(3, 'Weber AG', 15000.50, '2024-05-21');

Mehrere Zeilen in einem einzigen INSERT zusammenzufassen, wie hier gezeigt, nennt man Batch-Insert. Das ist deutlich schneller als ein eigenes Statement pro Zeile, weil die Datenbank weniger Einzelbefehle verarbeiten muss. Achten Sie bei SQLite auf zwei Details: Texte stehen in einfachen Anführungszeichen, und ein Apostroph im Text wird durch Verdopplung escaped, aus O'Brien wird also 'O''Brien'. Das ist nicht nur Kosmetik, sondern verhindert kaputte Strings und schließt eine klassische SQL-Injection-Lücke. Ein gut gebauter Generator macht das automatisch.

Beim Datentyp registriert fällt auf, dass er hier TEXT ist und nicht DATE. Das ist Absicht: SQLite kennt keinen eigenen Datumstyp, sondern speichert Datumswerte als Text im ISO-Format (JJJJ-MM-TT), als Zahl oder als Julianisches Datum. Der saubere und am besten sortierbare Weg ist das ISO-Textformat. Welche weiteren Eigenheiten die einzelnen Datenbanken haben, vergleicht der Ratgeber MySQL, PostgreSQL, SQLite oder SQL Server.

.import und INSERT im direkten Vergleich

Beide Wege führen ans Ziel, betonen aber unterschiedliche Stärken. Die folgende Übersicht hilft bei der Entscheidung, welcher zu Ihrer Situation passt.

Kriterium .import (sqlite3-Shell) INSERT-Statements
Voraussetzung sqlite3-Tool installiert beliebiges SQLite-Werkzeug
Geschwindigkeit sehr hoch, auch bei großen Dateien hoch bei Batch-Insert
Datentypen TEXT, wenn Tabelle neu erstellt explizit gesetzt
NULL bei leeren Zellen wird zu leerem Text echtes NULL möglich
Läuft in GUI-Programmen nein, nur Shell ja, überall
Ideal für große Dateien, schnelle Ladungen sauberes Schema, Portabilität

Die Faustregel lautet: Für eine schnelle, einmalige Ladung großer Dateien und wenn Sie ohnehin auf der Kommandozeile sind, ist .import kaum zu schlagen. Sobald es auf saubere Datentypen, echte NULL-Werte oder ein Skript ankommt, das auch ohne sqlite3-Tool läuft, sind generierte INSERT-Statements die bessere Wahl. Häufig kombiniert man beides: ein CREATE TABLE von Hand oder generiert, danach .import oder INSERT.

Schritt für Schritt ohne Installation

Wenn Sie das sqlite3-Tool nicht installieren möchten oder kein Recht dazu haben, erzeugen Sie das passende SQL mit unserem CSV-zu-SQL-Konverter direkt im Browser. Das Tool ist kostenlos, ohne Konto und ohne Limit nutzbar. So gehen Sie vor:

  1. CSV einfügen und Dialekt SQLite wählen: Fügen Sie Ihre Daten in das Eingabefeld ein oder wählen Sie eine .csv-Datei. Stellen Sie oben den Dialekt auf SQLite und prüfen Sie, ob das Trennzeichen stimmt, also Komma oder bei deutschem Excel Semikolon. Die erste Zeile wird als Kopfzeile mit den Spaltennamen gelesen.
  2. Typen prüfen und Statement kopieren: Das Tool schlägt pro Spalte einen Datentyp vor und erzeugt CREATE TABLE plus INSERT. Werfen Sie einen Blick auf reine Ziffernspalten wie Postleitzahlen und setzen Sie sie bei Bedarf auf Text. Kopieren Sie dann das fertige SQL oder laden Sie es als .sql-Datei herunter.
  3. SQL in SQLite ausführen: Öffnen Sie Ihre Datenbank in einem Programm wie DB Browser for SQLite oder in der Sprache Ihrer Wahl und führen Sie das SQL aus. Prüfen Sie zum Schluss mit SELECT count(*) FROM tabelle;, ob alle Zeilen angekommen sind.

Wichtig und ehrlich gesagt: Das Generieren der Statements geschieht zu 100 Prozent lokal in Ihrem Browser. Es gibt keinen Upload, keinen Server und keine Speicherung Ihrer Datei. Das Tool baut ausschließlich SQL-Text, es verbindet sich mit keiner Datenbank und führt nichts aus. Den eigentlichen Import in Ihre SQLite-Datei machen Sie selbst, und genau das ist aus Datenschutzsicht der Vorteil: Ihre Daten bleiben bei Ihnen. Die Logik hinter dem Schema beschreibt der Ratgeber CREATE TABLE aus CSV generieren.

Typische Stolpersteine und ehrliche Hinweise

Damit der Import beim ersten Versuch klappt, lohnt sich ein Blick auf die Fallen, die in der Praxis am häufigsten Ärger machen.

Problem Lösung
Alles in einer Spalte gelandet falsches Trennzeichen, mit .separator bzw. im Tool umstellen
Führende Null bei PLZ verschwindet Spalte als TEXT statt INTEGER anlegen
Kopfzeile als Datensatz importiert bei .import in existierende Tabelle --skip 1 nutzen
Umlaute erscheinen als wirre Zeichen CSV als UTF-8 speichern, nicht als ANSI/Latin-1
Leere Zellen werden zu leerem Text INSERT-Weg wählen, dort wird NULL korrekt gesetzt

Zwei Punkte verdienen Nachdruck. Erstens das Datumsthema: Da SQLite keinen eigenen DATE-Typ hat, hilft es nichts, eine Spalte DATE zu nennen. Speichern Sie Datumswerte im ISO-Format als Text, dann funktionieren Vergleiche und Sortierung zuverlässig. Ein deutsches Datum wie 31.12.2024 sortiert dagegen falsch und sollte vorher zu 2024-12-31 umgeformt werden.

Zweitens die Typ-Erkennung beim Generieren: Sie ist eine Heuristik, kein Datenbankarchitekt. Reine Ziffernfelder wie Postleitzahlen, Telefonnummern oder Artikelnummern werden leicht als Zahl erkannt, was eine führende Null verschluckt. Im Zweifel ist TEXT die sichere Wahl, und dank des dynamischen Typsystems von SQLite kostet das fast nichts. Lieber eine Spalte bewusst als Text speichern und später konvertieren, als beim Import an einem Ausreißer scheitern oder still eine Null verlieren.

Häufige Fragen

Wie importiere ich eine CSV-Datei in SQLite?

Es gibt zwei gängige Wege. In der sqlite3-Kommandozeile wechseln Sie mit .mode csv in den CSV-Modus und lesen die Datei mit .import meine.csv tabelle ein. Alternativ erzeugen Sie aus der CSV passende CREATE-TABLE- und INSERT-Statements und führen dieses SQL aus. Beide Wege brauchen keinen Server, SQLite ist eine einzelne Datei.

Was ist der Unterschied zwischen .import und INSERT-Statements?

.import ist ein Shell-Befehl der sqlite3-Kommandozeile und liest eine CSV direkt ein, sehr schnell auch bei großen Dateien. INSERT-Statements sind reines SQL, das Sie in jedem Werkzeug ausführen können, das mit SQLite spricht, also auch in GUI-Programmen oder per Bibliothek. INSERT macht Typen und NULL-Werte explizit, .import nimmt zunächst alles als Text.

Warum sind nach dem .import alle Spalten Text?

Wenn Sie mit .import in eine noch nicht existierende Tabelle laden, legt SQLite alle Spalten als TEXT an, weil eine CSV keine Typinformation enthält. Legen Sie die Tabelle vorher per CREATE TABLE mit den gewünschten Typen an, dann nutzt .import diese Spalten. Wegen des dynamischen Typsystems von SQLite bleiben Zahlen aber meist trotzdem nutzbar.

Mein deutsches Excel-CSV nutzt Semikolon. Was muss ich tun?

In der sqlite3-Shell stellen Sie das Trennzeichen mit .separator ";" um, bevor Sie .import aufrufen. Beim Generieren von INSERT-Statements wählen Sie das Semikolon als Trennzeichen, dann werden die Spalten korrekt aufgeteilt statt in einer einzigen Spalte zu landen.

Brauche ich eine Installation, um CSV in SQLite zu bringen?

Nicht zwingend. Für den .import-Weg brauchen Sie das sqlite3-Tool. Wollen Sie ohne Installation arbeiten, erzeugen Sie die CREATE-TABLE- und INSERT-Statements aus der CSV im Browser und führen sie dort aus, wo Ihre SQLite-Datenbank lebt. Das Generieren der Statements läuft komplett lokal, ohne Upload.

Weiterführende Artikel

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige