657
24.5
Das Modul sqlite3
Mit dem Pickle-Mechanismus lassen sich Listen und Dictionaries ohne viel Aufwand in
einer Datei speichern.
24.5 Das Modul sqlite3
SQLite ist ein Datei-basiertes Datenbanksystem, das ohne Serverprozess auskommt. SQL
(Structured Query Language) ist die am meisten verbreitete Abfragesprache für relationale
Datenbanken. Mit Operationen des Moduls sqlite3 (entwickelt von Gerhard Häring) können
Sie SQL-Statements ausführen lassen und so eine relationale Datenbank aufbauen, verän-
dern und befragen. Das Modul ist Teil der Standardinstallation von Python. Für wirklich
große Datenbanken mit vielen Daten und vielen Zugriffen sollten Sie besser ein professio-
nelles (serverbasiertes) Datenbanksystem verwenden, wie z.B. MySQL. Eine Anleitung zur
Nutzung des Python-Moduls MySQLdb für den Zugriff auf MySQL-Datenbanken findet
man z.B. in Python Gepackt (mitp-Verlag). Aber ein Programm, das mit SQLite funktioniert,
können Sie leicht an ein serverbasiertes SQL-Datenbanksystem anpassen.
24.5.1 Eine Tabelle anlegen
Bei SQLite brauchen Sie nicht explizit eine Datenbank einzurichten. Sie instanziieren ein-
fach ein Verbindungsobjekt, das eine Datenbank repräsentiert. Dabei geben Sie als Argu-
ment einen Pfad zu einer Datei an. In dieser Datei werden alle Daten gespeichert. Falls die
Datei noch nicht existiert, wird sie neu angelegt. Sie können die grundlegenden Komman-
dos im interaktiven Modus ausprobieren. Sie brauchen ein Verzeichnis für die Datenbank-
datei, z.B.
/tmp. Öffnen Sie eine Python-Shell und legen Sie los:
Um die Datenbank zu bearbeiten, benötigen Sie einen Cursor. Stellen Sie sich den Cursor
als einen Boten vor, der die Kommunikation mit dem Datenbanksystem bewerkstelligt. Sie
können dem Cursor einen Auftrag übergeben, z.B. eine Anfrage an die Datenbank, und Sie
können ihn anschließend nach dem Ergebnis befragen. Mit der Methode
cursor() eines
Verbindungsobjektes instanziieren Sie einen Cursor:
Die wichtigste Methode der Cursor-Objekte ist
execute(). Das Argument ist im einfachs-
ten Fall ein String, der ein SQL-Kommando enthält. In der folgenden Anweisung wird eine
neue Tabelle (Relation) namens
person erzeugt. Sie besteht aus zwei Spalten, die jeweils
Zeichenketten mit maximal 50 Zeichen enthalten. In dieser Tabelle sollen Namen und Tele-
fonnummern von Personen gespeichert werden.
>>> Person['Michael Klein']
'AUp12ertyb+8)=0$'
>>> import sqlite3
>>> verbindung = sqlite3.connect("/tmp/beispiel.db")
>>> c = verbindung.cursor()
>>> c.execute("""CREATE TABLE person(name VARCHAR(50), tel VARCHAR(20))""")
<sqlite3.Cursor object at 0x020C1E90>
Kapitel 24
Datenbanken
658
Das SQL-Kommando zur Erzeugung einer neuen Tabelle (Relation) hat folgendes Format:
In der Klammer hinter dem Namen der Tabelle werden die Namen der Spalten (Attribute)
und die zugehörigen Datentypen spezifiziert. Tabelle 24.3 beschreibt eine kleine Auswahl
von SQL-Datentypen.
Noch ist die Tabelle leer. Als Nächstes tragen Sie einige Zeilen mit konkreten Werten (Tupel)
ein. Hier sind lange Zeichenketten (mit dreifachen Anführungszeichen) praktisch, weil die
SQL-Kommandos selbst auch (einfache) Anführungszeichen enthalten. Die SQL-Schlüssel-
worte sind in Großbuchstaben geschrieben.
Jetzt haben Sie eine Tabelle mit drei Zeilen. Speichern Sie die Änderungen:
Wenn Sie den Cursor nicht mehr brauchen, schließen Sie ihn:
Das Gleiche gilt für die Verbindung:
Beachten Sie, dass beim Schließen der Verbindung die Änderungen nicht automatisch
gespeichert werden. Wenn Sie nicht vorher
commit() ausgeführt haben, können Daten ver-
loren gehen.
CREATE TABLE tabellenname ( spalte_1 datentyp_1, ...)
Datentyp Erklärung Beispiel
VARCHAR(n)
Eine Zeichenkette variabler Länge mit maximal n Zeichen
"Melanie Beck"
INT
Eine ganze Zahl zwischen -2147483648 und 2147483647
1234
FLOAT
Eine Gleitkommazahl
12.34
BINARY(n)
Binärdaten. Eine Folge aus n Byte.
b"abcd123"
Tabelle 24.3: Einige SQL-Datentypen
>>> c.execute("""INSERT INTO person VALUES("Melanie Beck" ,"02302 89912")""")
<sqlite3.Cursor object at 0x020C1E90>
>>> c.execute("""INSERT INTO person VALUES ("Moritz Blau" ,"0201 841111")""")
<sqlite3.Cursor object at 0x020C1E90>
>>> c.execute("""INSERT INTO person VALUES ("Tim Groß", "0251 199348")""")
<sqlite3.Cursor object at 0x020C1E90>
>>> verbindung.commit()
>>> c.close()
>>> verbindung.close()

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.