Stellen Sie sich vor: Sie schreiben eine Anwendung und benötigen eine Datenbank. Normalerweise bedeutet dies die Installation von MySQL oder PostgreSQL, die Einrichtung eines Servers, die Erstellung von Benutzern, die Einrichtung der Sicherheit... Stopp. Was ist, wenn ich sage, dass es eine Datenbank gibt, die ohne all das funktioniert?
Lernen Sie SQLite kennen. Es ist nicht nur eine leichte Alternative, sondern ein völlig anderer Ansatz für die Arbeit mit Daten. Und wenn Sie ein unerfahrener Entwickler sind, kann SQLite zu Beginn Ihrer Karriere Ihr bester Freund sein.
Was ist SQLite und warum ist es etwas Besonderes?
SQLite ist eine eingebettete relationale Datenbank. Aber was bedeutet "eingebettet"? Im Gegensatz zu MySQL oder PostgreSQL, die als separate Server fungieren, ist SQLite nur eine Bibliothek, die Sie mit Ihrer Anwendung verbinden. Die gesamte Datenbank wird in einer Datei auf der Festplatte gespeichert.
Klingt einfach? Weil es so ist. SQLite erfordert keine Serverinstallation, Portkonfiguration oder Benutzererstellung. Sie erstellen einfach eine Datei mit der Erweiterung .db oder .sqlite — und schon haben Sie eine vollwertige Datenbank.
Was SQLite einzigartig macht: Es ist die am weitesten verbreitete Datenbank der Welt. Sie ist in jedes Android- und iOS-Smartphone, Chrome- und Firefox-Browser, Windows- und macOS-Betriebssysteme integriert. Entwickler schätzen, dass es mehr als eine Billion aktiver SQLite-Datenbanken gibt. Ja, eine Billion - mit zwölf Nullen.
Wo wird SQLite verwendet?
SQLite eignet sich hervorragend für Aufgaben, bei denen keine Multi-User-Arbeit auf Datenbankebene erforderlich ist. Dies sind Desktop-Anwendungen, mobile Anwendungen, eingebettete Systeme, Prototypen von Webanwendungen, lokale Datenspeicherung in Browsern.
Konkrete Beispiele?
Messenger wie WhatsApp verwenden SQLite, um den Verlauf der Korrespondenz auf Ihrem Telefon zu speichern. Browser speichern Lesezeichen, Verlauf und Cookies in SQLite. Spiele speichern den Fortschritt des Spielers in SQLite. Sogar Dropbox verwendet SQLite, um Dateimetadaten zu synchronisieren.
Wann ist SQLite nicht geeignet?
Wenn Sie einen stark ausgelasteten Webdienst mit Tausenden von gleichzeitigen Verbindungen haben, ist es besser, PostgreSQL zu wählen. Wenn Sie Daten zwischen Servern replizieren müssen, kann SQLite dies nicht. Wenn die Daten in Terabyte gemessen werden, suchen Sie nach anderen Lösungen.
Installation und erste Schritte
Die gute Nachricht: SQLite ist möglicherweise bereits auf Ihrem Computer installiert. Öffnen Sie das Terminal und geben Sie den Befehl sqlite3 --version ein. Haben Sie die Version gesehen? Großartig, Sie können mit der Arbeit beginnen.
Wenn SQLite nicht installiert ist, dauert der Installationsvorgang eine Minute. Laden Sie unter Windows vorkompilierte Binärdateien von der offiziellen Website herunter. Verwenden Sie unter Linux den Paketmanager: sudo apt install sqlite3 für Ubuntu oder sudo yum install sqlite für CentOS. Auf macOS ist SQLite normalerweise bereits vorinstalliert, kann aber über Homebrew mit dem Befehl brew install sqlite3 aktualisiert werden.
Erstellen wir die erste Datenbank. Öffnen Sie das Terminal und geben Sie den Befehl sqlite3 myapp.db ein. Sie sehen eine SQLite-Einladung mit dem Präfix sqlite>. Herzlichen Glückwunsch - Sie haben gerade eine Datenbank erstellt. Ja, das war so einfach.
Grundlagen der Arbeit über die Befehlszeile
SQLite verfügt über eine interaktive Shell mit nützlichen Befehlen. Alle speziellen Befehle beginnen mit einem Punkt. Der Befehl .help zeigt eine Liste der verfügbaren Befehle an. Der Befehl .databases zeigt die verbundenen Datenbanken an. Der Befehl .tables zeigt alle Tabellen in der aktuellen Datenbank an. Der Befehl .schema gibt die Struktur aller Tabellen aus. Der Befehl .quit oder .exit beendet die Arbeit mit SQLite.
Versuchen wir, die erste Tabelle zu erstellen. Nehmen wir an, wir erstellen eine Anwendung zur Aufgabenverwaltung:
CREATE TABLE tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
description TEXT,
completed INTEGER DEFAULT 0,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);Was ist hier los? Wir haben eine Tabelle mit fünf Spalten erstellt. Spalte id ist ein automatisch inkrementierender Primärschlüssel, der automatisch generiert wird. Spalte title - Text, Pflichtfeld. Spalte description - Text, kann leer sein. Spalte completed - Zahl, Standard 0 (wird als boolesches Flag verwendet). Spalte created_at - Text, wird automatisch mit dem aktuellen Datum ausgefüllt.
Achten Sie auf die Datentypen. SQLite verwendet dynamische Typisierung und unterstützt fünf grundlegende Speichertypen: NULL (kein Wert), INTEGER (ganze Zahlen), REAL (Gleitkommazahlen), TEXT (Textzeichenfolgen) und BLOB (Binärdaten). Dies ist einfacher als in anderen Datenbanken, aber für die meisten Aufgaben ist es ausreichend.
Grundlegende Datenoperationen
Fügen wir nun einige Aufgaben zu unserer Tabelle hinzu:
INSERT INTO tasks (title, description)
VALUES ('Learn SQLite', 'Read the article and try the examples');
INSERT INTO tasks (title, description)
VALUES ('Write code', 'Create a simple application with SQLite');
INSERT INTO tasks (title)
VALUES ('Mark task as completed');Mal sehen, was dabei herauskam:
SELECT * FROM tasks;Sie sehen drei Datensätze mit automatisch generierten IDs und Erstellungsdaten. Beachten Sie, dass im dritten Eintrag das Feld description NULL sein wird — wir haben es nicht angegeben.
Lassen Sie uns die erste Aufgabe als erledigt markieren:
UPDATE tasks
SET completed = 1
WHERE id = 1;Wählen Sie nun nur noch die noch nicht erledigten Aufgaben aus:
SELECT id, title, completed
FROM tasks
WHERE completed = 0;Und wenn Sie eine Aufgabe löschen müssen:
DELETE FROM tasks
WHERE id = 3;Diese vier Operationen - SELECT, INSERT, UPDATE, DELETE - bilden die Grundlage für die Arbeit mit jeder relationalen Datenbank. Die SQLite-Syntax ist fast identisch mit Standard-SQL, sodass das Wissen leicht auf andere DBMS übertragen werden kann.
Arbeiten mit SQLite aus Python
Das Beste an SQLite ist, dass die Unterstützung direkt in die Python-Standardbibliothek integriert ist. Es müssen keine zusätzlichen Pakete installiert werden - das Modul sqlite3 ist bereits vorhanden.
Hier ist ein minimales Beispiel für die Arbeit:
import sqlite3
# Wir stellen eine Verbindung zur Datenbank her (die Datei wird automatisch erstellt)
conn = sqlite3.connect('myapp.db')
cursor = conn.cursor()
# Erstellen Sie eine Tabelle
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
email TEXT NOT NULL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
)
''')
# Benutzer hinzufügen
cursor.execute(
'INSERT INTO users (username, email) VALUES (?, ?)',
('john_doe', 'john@example.com')
)
# Änderungen werden gespeichert
conn.commit()
# Alle Benutzer werden abgerufen
cursor.execute('SELECT * FROM users')
users = cursor.fetchall()
for user in users:
print(f"ID: {user[0]}, Username: {user[1]}, Email: {user[2]}")
# Verbindung schließen
conn.close()Achten Sie auf die Fragezeichen in der INSERT-Abfrage. Dies sind Platzhalter für Parameter - die richtige Methode, um Daten an SQL-Abfragen zu übergeben. Verwenden Sie niemals f-Strings oder Verkettungen, um Daten in SQL einzufügen - dies öffnet die Tür für SQL-Injektionen.
Eine bequemere Arbeitsweise ist die Verwendung des Kontext-Managers:
import sqlite3
with sqlite3.connect('myapp.db') as conn:
cursor = conn.cursor()
# Wir erhalten Ergebnisse als Wörterbücher anstelle von Tupeln
conn.row_factory = sqlite3.Row
cursor.execute('SELECT * FROM users WHERE username = ?', ('john_doe',))
user = cursor.fetchone()
if user:
print(f"User found: {user['username']}, {user['email']}")Die Konstruktion with schließt die Verbindung automatisch und speichert die Änderungen. Und row_factory = sqlite3.Row ermöglicht es, auf Spalten nach Namen anstatt nach Index zuzugreifen — viel bequemer.

Arbeiten mit SQLite aus JavaScript
In Node.js ist die beliebteste Bibliothek für die Arbeit mit SQLite better-sqlite3. Sie ist synchron und sehr schnell.
Installieren Sie zuerst das Paket:
npm install better-sqlite3Jetzt können wir mit der Datenbank arbeiten:
const Database = require('better-sqlite3');
const db = new Database('myapp.db');
// Erstellen Sie eine Tabelle
db.exec(`
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL NOT NULL,
stock INTEGER DEFAULT 0
)
`);
// Vorbereitete Anfrage zum Einfügen
const insert = db.prepare(
'INSERT INTO products (name, price, stock) VALUES (?, ?, ?)'
);
// Wir fügen mehrere Produkte hinzu
const products = [
['Laptop', 45999.99, 5],
['Mouse', 599.00, 20],
['Keyboard', 1299.00, 15]
];
for (const product of products) {
insert.run(product);
}
// Wir erhalten alle Waren
const allProducts = db.prepare('SELECT * FROM products').all();
console.log('All products:', allProducts);
// Wir erhalten ein Produkt
const laptop = db.prepare('SELECT * FROM products WHERE name = ?').get('Laptop');
console.log('Product found:', laptop);
// Wir schließen die Datenbank
db.close();Der Vorteil von better-sqlite3 ist, dass es synchron ist - Sie müssen sich nicht mit Promises und Async/Await für einfache Operationen herumschlagen. Für komplexere Szenarien verwendet der Browser Web SQL (veraltet) oder IndexedDB, die nach anderen Prinzipien arbeiten.
Praktische Tipps und Best Practices
Erste Regel: Verwenden Sie immer Transaktionen für mehrere zusammenhängende Operationen. Dies gewährleistet nicht nur die Datenintegrität, sondern beschleunigt auch die Arbeit erheblich:
conn = sqlite3.connect('myapp.db')
cursor = conn.cursor()
try:
cursor.execute('BEGIN TRANSACTION')
# Mehrere Einfügevorgänge
for i in range(1000):
cursor.execute('INSERT INTO logs (message) VALUES (?)', (f'Log {i}',))
cursor.execute('COMMIT')
except Exception as e:
cursor.execute('ROLLBACK')
print(f'Error: {e}')
finally:
conn.close()Ohne Transaktion können tausend Einfügungen mehrere Sekunden dauern. Mit einer Transaktion dauert es nur Bruchteile einer Sekunde.
Zweiter Tipp: Verwenden Sie Indizes für häufig angeforderte Spalten. Wenn Sie häufig nach Benutzern per E-Mail suchen, erstellen Sie einen Index:
CREATE INDEX idx_users_email ON users(email);Indizes beschleunigen SELECT-Abfragen, verlangsamen jedoch INSERT und UPDATE. Verwenden Sie sie mit Bedacht.
Dritter Punkt: Verwenden Sie regelmäßig den Befehl VACUUM, um die Datenbank zu optimieren. SQLite gibt beim Löschen von Datensätzen nicht automatisch Speicherplatz frei:
VACUUM;Dieser Befehl baut die Datenbank neu auf, gibt nicht verwendeten Speicherplatz frei und optimiert die Dateistruktur.
Viertens: Erstellen Sie Backups. SQLite ist nur eine Datei, daher ist das Backup einfach. Kopieren Sie einfach die Datei .db an einen sicheren Ort. Tun Sie dies jedoch, wenn die Datenbank nicht aktiv verwendet wird, oder verwenden Sie spezielle Befehle für die Online-Sicherung.
Einschränkungen, die Sie kennen sollten
SQLite ist großartig, hat aber seine Grenzen. Die Größe der Datenbank kann theoretisch 281 Terabyte erreichen, aber in der Praxis wird empfohlen, einige Gigabyte nicht zu überschreiten. SQLite verwendet eine datenbankweite Sperre - beim Schreiben können andere Prozesse nicht lesen. Dies ist für lokale Anwendungen in Ordnung, aber nicht für stark ausgelastete Server.
Keine integrierte Unterstützung für Benutzer und Zugriffsrechte — die Sicherheit wird auf Dateisystemebene bereitgestellt. Keine Replikation und Clusterbildung von der Box. Einige erweiterte SQL-Funktionen wie Fensterfunktionen fehlen (obwohl die grundlegende Unterstützung in neuen Versionen verfügbar ist).
Aber für 90% der Aufgaben eines unerfahrenen Entwicklers sind diese Einschränkungen nicht kritisch. SQLite ist das ideale Tool zum Lernen, Prototypisieren und Erstellen lokaler Anwendungen.
Tools für die Arbeit mit SQLite
Die Befehlszeile ist gut, aber manchmal möchte man eine visuelle Oberfläche. Für SQLite gibt es viele GUI-Tools. DB Browser für SQLite ist ein kostenloses, plattformübergreifendes Open-Source-Tool, das sich hervorragend für Anfänger eignet. SQLiteStudio ist eine weitere kostenlose Option mit Plugin-Unterstützung. Für Profis gibt es DataGrip von JetBrains oder VS Code-Erweiterungen wie SQLite Viewer.
Ich persönlich empfehle, mit DB Browser zu beginnen — es ist intuitiv, ermöglicht es Ihnen, Tabellen visuell zu erstellen, Daten in Tabellenform anzuzeigen, SQL-Abfragen mit Syntaxhervorhebung auszuführen und Daten in verschiedene Formate zu exportieren.
Praktische Aufgabe
Der beste Weg zu lernen ist zu üben. Versuchen Sie, eine einfache App zur Spesenverwaltung zu erstellen. Die Datenbank sollte eine Tabelle mit Ausgaben (Datum, Kategorie, Betrag, Beschreibung) und eine Tabelle mit Kategorien (Name, Farbe zur Visualisierung) enthalten. Implementieren Sie das Hinzufügen einer neuen Ausgabe, das Anzeigen aller Ausgaben für einen bestimmten Zeitraum, das Gruppieren von Ausgaben nach Kategorien und das Berechnen des Gesamtbetrags.
Dies ist ein kleines Projekt, aber es deckt alle wichtigen Datenbankoperationen ab und gibt Ihnen praktische Erfahrung mit SQLite.
Befund
SQLite ist nicht nur eine Datenbank für Anfänger. Es ist ein leistungsstarkes Tool, das von Millionen von Anwendungen in der Produktion verwendet wird. Die einfache Installation und Verwendung macht es ideal für Schulungen, und seine Zuverlässigkeit und Leistung machen es zu einer ausgezeichneten Wahl für echte Projekte.
Beginnen Sie mit SQLite, lernen Sie die Grundlagen der Datenbankarbeit, verstehen Sie die Prinzipien von SQL - und dann wird der Übergang zu PostgreSQL oder MySQL einfach und natürlich sein. Schließlich sind die Konzepte überall gleich, nur der Umfang und die Anzahl der zusätzlichen Funktionen ändern sich.
Installieren Sie also SQLite, erstellen Sie Ihre ersten Tabellen und beginnen Sie mit dem Experimentieren. Es ist einfacher als es scheint und interessanter als man sich vorstellen kann.
Kodik — eine Bildungsplattform für Anfänger in der Programmierung mit Kursen in Python, JavaScript und Webentwicklung.
Schließen Sie sich unserem Telegram-Community Entwickler, wo Sie Fragen stellen, Hilfe zum Code erhalten und Gleichgesinnte für gemeinsames Lernen finden können.
