SQLite ist das am weitesten ver­brei­te­te Da­ten­bank­sys­tem weltweit und bietet die Mög­lich­keit, eine SQL-basierte Datenbank auf­zu­set­zen, die sich direkt in An­wen­dun­gen ver­schie­dens­ter Art in­te­grie­ren lässt. Auch Python un­ter­stützt SQLite3 mit einem eigenen Modul.

SQLite3 in Python nutzen

SQLite können Sie in Python in Form eines Moduls einbinden. Für die ef­fi­zi­en­te Arbeit mit dem Da­ten­bank­sys­tem in Python empfiehlt es sich, Vor­kennt­nis­se in SQL und Python mit­zu­brin­gen. So gehen sowohl die Ein­rich­tung als auch die spätere Nutzung der Datenbank leicht von der Hand.

Tipp

Wenn Sie Ihre Python-Kennt­nis­se auf­fri­schen 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 auf­ge­setzt. Wenn Sie die Ein­rich­tung erst einmal ab­ge­schlos­sen haben, können Sie mit Ihrer Datenbank mithilfe von ge­wöhn­li­chen SQL-Befehlen kom­mu­ni­zie­ren.

Schritt 1: SQLite3 in Python im­por­tie­ren

Damit Sie Zugriff auf die SQLite3-spe­zi­fi­schen Funk­tio­nen in Python haben, müssen Sie zunächst das ent­spre­chen­de Modul im­por­tie­ren:

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 so­ge­nann­tes Con­nec­tion-Objekt zurück, über das Sie mit Ihrer Datenbank kom­mu­ni­zie­ren können. Ein Funk­ti­ons­auf­ruf von connect, der eine Ver­bin­dung mit einer Datenbank namens „test“ herstellt, sieht wie folgt aus:

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

Der Über­ga­be­pa­ra­me­ter der Funktion ist eine Da­ten­bank­da­tei. Wenn Sie noch keine Da­ten­bank­da­tei namens „test.db“ erstellt haben, wird dies durch den Funk­ti­ons­auf­ruf von connect au­to­ma­tisch nach­ge­holt.

Schritt 3: Über­prü­fen, ob Datenbank er­folg­reich erstellt wurde

Sie können an dieser Stelle optional über­prü­fen, ob Ihre SQLite3-Datenbank er­folg­reich erstellt worden ist. Hierfür können Sie auf dem eben er­stell­ten Con­nec­tion-Objekt die Funktion „total_changes“ aufrufen, die Ihnen anzeigt, wie viele Ta­bel­len­zei­len Ihrer re­la­tio­na­len Datenbank seit Ver­bin­dung mit der Datenbank verändert wurden:

print(connection.total_changes)

In unserem Fall sollte die Funktion den Wert „0“ zu­rück­ge­ben, 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 hin­ter­legt haben, kann der Rück­ga­be­wert der Funktion sich natürlich un­ter­schei­den.

Schritt 4: Grund­ge­rüst Ihrer Datenbank erstellen

Um Daten zu Ihrer SQLite3-Datenbank in Python hin­zu­zu­fü­gen, müssen Sie zunächst, wie bei re­la­tio­na­len Da­ten­ban­ken üblich, eine Tabelle erstellen, in der Sie Ihre Daten hin­ter­le­gen können.

Hierfür müssen Sie mit SQLite3 in Python zunächst ein Cursor-Objekt mit der vor­de­fi­nier­ten „cursor“-Funktion erstellen, das es Ihnen er­mög­licht, 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 ge­wöhn­li­chen 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 ent­spre­chen­de Python-Code so aus:

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

Schritt 5: Daten hin­zu­fü­gen

Dieselbe Syntax, die Sie benötigen, um eine Tabelle zu erstellen, benötigen Sie auch, um Daten in Ihre Tabelle ein­zu­fü­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 Da­ten­bank­ta­bel­le namens „example“ drei Einträge hin­zu­ge­fügt.

Um die Än­de­run­gen 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 ver­schie­de­nen Ser­ver­ty­pen. Für kleine An­wen­dun­gen und Da­ten­men­gen bietet sich z. B. ein cloud­ba­sier­ter vServer an. Für En­ter­pri­se-An­wen­dun­gen ist hingegen ein Dedicated Server besser geeignet.

Daten auslesen

Natürlich können Sie mit SQLite3 in Python nicht nur eigene Da­ten­ban­ken aufsetzen, sondern auch Daten aus be­stehen­den Da­ten­ban­ken auslesen und ausgeben. Hierfür müssen Sie sich zunächst mit der ge­wünsch­ten Datenbank verbinden und – wie in der obigen Schritt-für-Schritt-Anleitung gesehen – ein ent­spre­chen­des Con­nec­tion- und Cursor-Objekt erstellen. An­schlie­ßend können Sie Ihre SQL-Abfrage for­mu­lie­ren, mit der „execute“-Funktion an Ihre Datenbank schicken und sich mit der „fetchall“-Funktion alle re­sul­tie­ren­den 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 ent­spre­chen. Um sich alle diese Zeilen auf der Konsole ausgeben zu lassen, können Sie eine Python for-Loop in Ver­bin­dung mit einem print-Statement benutzen.

Be­stehen­de Daten mo­di­fi­zie­ren

Da SQLite3 den SQL-Be­fehls­satz un­ter­stützt, können Sie die Daten in Ihrer Datenbank auch mo­di­fi­zie­ren oder löschen. Dazu senden Sie die ent­spre­chen­den SQL-Befehle an Ihre Datenbank. Auch hierfür müssen Sie zunächst eine Ver­bin­dung zu Ihrer Datenbank aufbauen und ein Con­nec­tion- 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")

Platz­hal­ter nutzen

Wenn Sie in Ihrem Python-Programm dy­na­mi­sche SQL-Anfragen for­mu­lie­ren möchten, sollten Sie nie Python-String-Ope­ra­tio­nen benutzen. Diese können durch Hacker aus­ge­nutzt werden, um Ihr Programm mit SQL In­jec­tions an­zu­grei­fen. Statt­des­sen sollten Sie in Python auf den SQL-Platz­hal­ter „?“ zu­rück­grei­fen, den Sie in Ihrer mit „execute“ ver­schick­ten SQL-Anfrage anstelle eines spe­zi­fi­schen Wertes nutzen. Als zweiten Parameter können Sie der „execute“-Funktion dann ein Python Tuple übergeben, durch das die Fra­ge­zei­chen ersetzt werden sollen.

Folgende Anfragen sind also äqui­va­lent:

# 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 Fra­ge­zei­chen in der SQL-Anfrage in der Rei­hen­fol­ge ersetzt werden, in der Sie die Variablen im Tuple angeben.

Ver­bin­dung zu Ihrer Datenbank schließen

Nachdem Sie alle Ope­ra­tio­nen auf Ihrer Datenbank aus­ge­führt haben, müssen Sie die Ver­bin­dung zu Ihrer Datenbank schließen. Auch hierfür ist im SQLite3-Python-Modul eine ent­spre­chen­de Python-Funktion hin­ter­legt, die Sie direkt auf Ihrem Con­nec­tion-Objekt aufrufen können:

connection.close()
Zum Hauptmenü