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.
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()
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()