SQLite3 mit Python

SQLite ist das am weitesten verbreitete Datenbanksystem weltweit und bietet die Möglichkeit, eine SQL-basierte Datenbank aufzusetzen, die sich direkt in Anwendungen verschiedenster Art integrieren lässt. Auch Python unterstützt SQLite3 mit einem eigenen Modul.

SQLite3 in Python nutzen

SQLite können Sie in Python in Form eines Moduls einbinden. Für die effiziente Arbeit mit dem Datenbanksystem in Python empfiehlt es sich, Vorkenntnisse in SQL und Python mitzubringen. So gehen sowohl die Einrichtung als auch die spätere Nutzung der Datenbank leicht von der Hand.

Tipp

Wenn Sie Ihre Python-Kenntnisse auffrischen wollen, lohnt sich ein Blick in unser Python-Tutorial.

Eine eigene Datenbank aufsetzen – Schritt für Schritt

Eine eigene SQLite3-Datenbank in Python ist in nur wenigen Schritten aufgesetzt. Wenn Sie die Einrichtung erst einmal abgeschlossen haben, können Sie mit Ihrer Datenbank mithilfe von gewöhnlichen SQL-Befehlen kommunizieren.

Schritt 1: SQLite3 in Python importieren

Damit Sie Zugriff auf die SQLite3-spezifischen Funktionen in Python haben, müssen Sie zunächst das entsprechende Modul importieren:

import sqlite3

Schritt 2: Erstellen der Datenbank

Im nächsten Schritt erstellen Sie eine eigene Datenbank mithilfe der SQLite-Funktion „connect()“. Sie liefert Ihnen ein sogenanntes Connection-Objekt zurück, über das Sie mit Ihrer Datenbank kommunizieren können. Ein Funktionsaufruf von connect, der eine Verbindung mit einer Datenbank namens „test“ herstellt, sieht wie folgt aus:

connection = sqlite3.connect("test.db")

Der Übergabeparameter der Funktion ist eine Datenbankdatei. Wenn Sie noch keine Datenbankdatei namens „test.db“ erstellt haben, wird dies durch den Funktionsaufruf von connect automatisch nachgeholt.

Schritt 3: Überprüfen, ob Datenbank erfolgreich erstellt wurde

Sie können an dieser Stelle optional überprüfen, ob Ihre SQLite3-Datenbank erfolgreich erstellt worden ist. Hierfür können Sie auf dem eben erstellten Connection-Objekt die Funktion „total_changes“ aufrufen, die Ihnen anzeigt, wie viele Tabellenzeilen Ihrer relationalen Datenbank seit Verbindung mit der Datenbank verändert wurden:

print(connection.total_changes)

In unserem Fall sollte die Funktion den Wert „0“ zurückgeben, da wir noch keine SQL-Befehle verwendet und somit eine leere Datenbank vorliegen haben. Für den Fall, dass Sie bereits Daten in Ihrer Datenbank hinterlegt haben, kann der Rückgabewert der Funktion sich natürlich unterscheiden.

Schritt 4: Grundgerüst Ihrer Datenbank erstellen

Um Daten zu Ihrer SQLite3-Datenbank in Python hinzuzufügen, müssen Sie zunächst, wie bei relationalen Datenbanken üblich, eine Tabelle erstellen, in der Sie Ihre Daten hinterlegen können.

Hierfür müssen Sie mit SQLite3 in Python zunächst ein Cursor-Objekt mit der vordefinierten „cursor“-Funktion erstellen, das es Ihnen ermöglicht, SQL-Befehle an Ihre Datenbank zu senden. Der Code, den Sie hierfür benötigen, sieht wie folgt aus:

cursor = connection.cursor()

Im Anschluss können Sie die „execute“-Funktion aus dem SQLite3-Modul nutzen, um SQL-Befehle an Ihre Datenbank zu senden. Die Funktion nimmt Ihre Befehle, die der gewöhnlichen SQL-Syntax folgen, als Strings entgegen. Wenn Sie also eine Datenbank mit dem Namen „example“ und den Spalten „id“, „name“ und „age“ erstellen möchten, sieht der entsprechende Python-Code so aus:

cursor.execute("CREATE TABLE IF NOT EXISTS example (id INTEGER, name TEXT, age INTEGER)")

Schritt 5: Daten hinzufügen

Dieselbe Syntax, die Sie benötigen, um eine Tabelle zu erstellen, benötigen Sie auch, um Daten in Ihre Tabelle einzufügen:

cursor.execute("INSERT INTO example VALUES (1, 'alice', 20)")
cursor.execute("INSERT INTO example VALUES (2, 'bob', 30)")
cursor.execute("INSERT INTO example VALUES (3, 'eve', 40)")

Mit obigem Code haben Sie Ihrer Datenbanktabelle namens „example“ drei Einträge hinzugefügt.

Um die Änderungen in Ihrer Datenbank zu speichern, nutzen Sie die „commit“-Funktion:

connection.commit()
Tipp

Sie möchten Ihre SQLite3-Datenbank auf einem eigenen Server sichern? Dazu haben Sie die Wahl zwischen verschiedenen Servertypen. Für kleine Anwendungen und Datenmengen bietet sich z. B. ein cloudbasierter vServer an. Für Enterprise-Anwendungen ist hingegen ein Dedicated Server besser geeignet.

Daten auslesen

Natürlich können Sie mit SQLite3 in Python nicht nur eigene Datenbanken aufsetzen, sondern auch Daten aus bestehenden Datenbanken auslesen und ausgeben. Hierfür müssen Sie sich zunächst mit der gewünschten Datenbank verbinden und – wie in der obigen Schritt-für-Schritt-Anleitung gesehen – ein entsprechendes Connection- und Cursor-Objekt erstellen. Anschließend können Sie Ihre SQL-Abfrage formulieren, mit der „execute“-Funktion an Ihre Datenbank schicken und sich mit der „fetchall“-Funktion alle resultierenden Zeilen anzeigen lassen:

cursor.execute("SELECT * FROM example")
rows = cursor.fetchall()
for row in rows:
    print(row)

Die „fetchall“-Funktion liefert Ihnen eine Liste von Zeilen zurück, die Ihrer Abfrage entsprechen. Um sich alle diese Zeilen auf der Konsole ausgeben zu lassen, können Sie eine Python for-Loop in Verbindung mit einem print-Statement benutzen.

Bestehende Daten modifizieren

Da SQLite3 den SQL-Befehlssatz unterstützt, können Sie die Daten in Ihrer Datenbank auch modifizieren oder löschen. Dazu senden Sie die entsprechenden SQL-Befehle an Ihre Datenbank. Auch hierfür müssen Sie zunächst eine Verbindung zu Ihrer Datenbank aufbauen und ein Connection- sowie ein Cursor-Objekt erstellen.

Daten löschen

Um die Zeile mit der ID 1 zu löschen, können Sie folgenden Code nutzen:

cursor.execute("DELETE FROM example WHERE id = 1")

Daten verändern

Mit dem folgenden Befehl können Sie das Alter in der Zeile mit der ID 2 verändern:

cursor.execute("UPDATE example SET age = 31 WHERE id = 2")

Platzhalter nutzen

Wenn Sie in Ihrem Python-Programm dynamische SQL-Anfragen formulieren möchten, sollten Sie nie Python-String-Operationen benutzen. Diese können durch Hacker ausgenutzt werden, um Ihr Programm mit SQL Injections anzugreifen. Stattdessen sollten Sie in Python auf den SQL-Platzhalter „?“ zurückgreifen, den Sie in Ihrer mit „execute“ verschickten SQL-Anfrage anstelle eines spezifischen Wertes nutzen. Als zweiten Parameter können Sie der „execute“-Funktion dann ein Python Tuple übergeben, durch das die Fragezeichen ersetzt werden sollen.

Folgende Anfragen sind also äquivalent:

# Direkte SQL-Anfrage
cursor.execute("UPDATE example SET age = 31 WHERE id = 2")
# SQL-Anfrage mit Platzhaltern
age_var = 31
id_var = 2
cursor.execute("UPDATE example SET age = ? WHERE id = ?", (age_var, id_var))

Beachten Sie, dass die Fragezeichen in der SQL-Anfrage in der Reihenfolge ersetzt werden, in der Sie die Variablen im Tuple angeben.

Verbindung zu Ihrer Datenbank schließen

Nachdem Sie alle Operationen auf Ihrer Datenbank ausgeführt haben, müssen Sie die Verbindung zu Ihrer Datenbank schließen. Auch hierfür ist im SQLite3-Python-Modul eine entsprechende Python-Funktion hinterlegt, die Sie direkt auf Ihrem Connection-Objekt aufrufen können:

connection.close()