home

Dokumentation Datenbanken

 

Modul import: from sqlite3 import *

Zugriff auf eine SQLite Datenbank (weitgehend kompatible zu sqlite3 von Python 2.x, 3.x).

Global:
Befehl Aktion
connect(database)

stellt eine Verbindung zu einer SQLite-Datenbank-Datei mit gegebenen Dateinamen her und gibt ein Connection-Objekt zurück. Falls die Datenbank-Datei nicht existiert, wie sie erstellt. Die Datenbank wird für den exklusiven Zugriff geöffnet, bis sie mit close() geschlossen wird

connect(database, True) dasselbe, aber öffnet die Datenbank im Auto-Commit-Modus, d.h. alle Datenbankoperationen werden sofort wirksam
getDbInfo(database) gibt ein Dictionary mit allen Tabellennamen und ihren Feldnamen (Attribute) zurück

Klasse Connection:
Methode Aktion
cursor()

erzeugt einen Datenbank-Cursor und gibt diesen zurück

execute(sql) führt den SQL-Befehl aus (wird erst bei commit() in der Datenbank wirksam) und gibt den dabei verwendeten Cursor zurück
commit() schreibt einen oder mehrere vorher abgegebene SQL-Befehle in die Datenbank
close() beendet die Verbindung zur Datenbank. Befehle, die nicht mit commit() abgeschlossen sind, gehen verloren. Wird das Programm durch eine Exception vorher abgebrochen, so bleibt die Verbindung bestehen und TigerJython muss neu gestartet werden, um eine neue Connection aufzubauen
showTables() gibt eine Liste mit den Tabellennamen zurück
describeTable(table) gibt die Information über die Tabellenstruktur als SQL-Create-Befehl zurück


Klasse Cursor:
Methode Aktion
execute(sql)

führt den SQL-Befehl aus (wird erst bei commit() in der Datenbank wirksam). Bei SELECT wird ein Resultset erzeugt, der mit dem Cursor durchlaufen werden kann

fetchone() liefert den Datensatz zurück, auf den der Cusor zeigt, und stellt den Cursor auf den nächsten Datensatz. Falls kein Resultset erzeugt wurde oder der Cursor ausserhalb des Resultset steht, wird None zurückgegeben
fetchmany(n) liefert eine Liste mit den n nächsten Datensätze zurück (aufgehend vom Datensatz, auf den der Cursor zeigt) und stellt den Cursor um n vorwärts. Falls kein Resultset erzeugt wurde, n < 1 ist oder der Cursor ausserhalb des Resultset steht, wird eine leere Liste zurückgegeben. Falls nicht genügend Datensätze vorhanden sind, wird der Rest der Datensätze zurückgegeben
fetchall() liefert eine Liste mit allen Datensätzen zurück (aufgehend vom Datensatz, auf den der Cursor zeigt). Falls kein Resultset erzeugt wurde, wird eine leere Liste zurückgegeben
getColumnNames() gibt eine Liste mit den Feldnamen des SELECT-Befehls zurück
getColumnName(n) gibt den Feldnamen des n-ten Feldes des SELECT-Befehls zurück (n = 1..Anzahl Felder)
getColumnCount() gibt die Anzahl der Felder des SELECT-Befehls zurück
getMetaData() gibt ein MetaData-Objekt zurück (JDBC4ResultSet)
getBytes(filename) gibt einen Bytearray (Typ array.arrray) der Datei filename zurück (absoluter oder relativer Pfad bezüglich des Verzeichnis, in dem sich tigerjython2.jar befindet)
updateBlob(table, where, attribute, buffer) macht in der gegebenen Tabelle einen Update des BLOB-Feldes mit dem Feldnamen attribute (in allen Datensätzen, welche die Bedingung where erfüllten). buffer ist ein Bytearray (Typ array.array), der mit getBytes(filename) von einer Datei geholt werden kann. Beispiel: update(tbl, "id = 1", "flags", getBytes("swissflag.gif"))

Bemerkung: Wird das Connection-Objekt con in einem with con: -Block verwendet, so wird am Ende des Blocks automatisch con.commit() und con.close() aufgerufen. Auch bei Exceptions wird damit die Datenbank sicher geschlossen. Beispiel:

from sqlite3 import *
with connect("test.db") as con:
    con.execute("DELETE FROM people")


Modul import: from dbapi import *

Zugriff auf verschiedene Datenbanken: PostgreSQL, SQLite, MySQL, Derby (über JDBC-Treiber)

Befehl Aktion
connect(sqlite:dbname) stellt eine Verbindung zu einer SQLite-Datenbank her und gibt ein Connection-Objekt zurück
connect(derby:dbname) stellt eine Verbindung zu einer eingebetteten Derby-Datenbank her und gibt ein Connection-Objekt zurück
connect(derbyserver:serverURL, dbname, username, password)

stellt eine Verbindung zu einer Derby-Server-Datenbank her und gibt ein Connection-Objekt zurück

connect(mysql:serverURL, dbname, username, password) stellt eine Verbindung zu einer MySQL-Datenbank her und gibt ein Connection-Objekt zurück
connect(postgre:serverURL, dbname, username, password) stellt eine Verbindung zu einer PostgreSQL-Datenbank her und gibt ein Connection-Objekt zurück

Die JDBC-Treiber können von hier heruntergeladen werden. Sie müssen in das Unterverzeichnis Lib des Verzeichnis von tigerjython2.jar kopiert werden.
Das Datenbank API entspricht weitgehend den Python Database API Specification v2.0.

 

Modul import: from prettytable import *

Formatierte Ausgabe von Tabellendaten (cursor ist ein Datenbank-Cursor von SQLite)

Befehl Aktion
printTable(cursor)

führt ein cursor.fetchall() aus und zeigt das Resultat linksbündig formatiert in der Konsole an (ein zweiter Aufruf ergibt ein leeres Resultset)

strTable(cursor)

dasselbe, aber gibt das formatierte Resultat als String zurück
printTable(cursor, align = "x") wie oben, aber formatiert alle Spalten für x = "l" linksbündig, "c" zentriert, "r" rechtsbündig (dasselbe für strTable())
printTable(cursor, align = ["x", "x", ...]) wie oben, aber formatiert Spalten einzeln der Reihe nach für x = "l", "c", "r" (dasselbe für strTable())
printTable(cursor, align = ["x", "x", ...], sortby = fieldname) wie oben, aber sortiert die Ausgabe alphabetisch nach dem gegebenen Datenbankfeld (Spalte) (dasselbe für strTable())
showTable(cursor, params) dasselbe wie printTable(), aber die Tabelle wird in einem eigenen Fenster angezeigt

Das Modul kann auch zur tabularisch formatierten Ausgabe ohne Datenbank-Anbindung verwendet werden. Siehe das Tutorial hier.

 

Modul import: from dbtable import *

Abstraktion von Datenbank-Tabellen ohne SQL

Klasse DbTable

Befehl Aktion
tbl = DbTable(fieldname1, fieldname2,...)

erzeugt ein Tabellenobjekt mit beliebig vielen Feldnamen (als String). Die Feldnamen können in ein Tupel gepackt sein

tbl = DbTable(anotherTable) erzeugt einen (tiefen) Klone des Tabellenobjekts
tbl = DbTable() erzeugt eine leere Tabelle, die für restore(), restoreFromTJ() oder importFromCSV() verwendet werden kann

tbl.insert(value1, value2,...)

fügt eine Zeile mit den gegebenen Werten in die Tabelle. Die Werte können in ein Tupel gepackt sein. Erlaubte Datentypen: str, int, float, BLOB (binär). Es müssen die Werte aller Felder angegeben werden. Aus der zuerst eingegenen Zeile wird der Datentyp der Felder bestimmt. Binäre Felderwerte sind Bytearrays (Rückgabewert von getBytes(filename))
tbl.insertMany(liste) fügt mehrere Zeilen, die in liste (oder tuple) enthalten sind (beispielsweise von einer select() Rückgabe). Aus der zuerst eingegenen Zeile wird der Datentyp der Felder bestimmt (int, float oder str)
for row in tbl:
     do_something_ with row.fieldname
Durchlaufen aller Zeilen und Verwenden der Feldwerte
tbl.select(fieldname1, fieldname2, ..., pattern) gibt ein Tupel aller Zeilen mit den angegebenen Feldern zurück. Wird mit sort() ein Sortierattribut angegeben, so werden die Zeilen in der Sortierreihenfolge zurückgegeben. pattern ist eine Sequenz mit Gleichheitsbedingungen attribute = wert. Falls ein Attribut fehlt, erfüllen alle Werte die Bedingung. Beispiel: select("name", "vorname", "alter", name = "Meyer", vorname = "Hans") gibt die Felder "name", "vorname" und "alter" aller "Meyer Hans" zurück. Die Werte haben den Datentyp str, int oder float
tbl.sort(fieldname) definiert einen Feldnamen (String) als Sortierattribut. Tabellenansichten und select() werden nachher in aufsteigender Reihenfolge dieses Attributs ausgegeben. Ohne Angabe eines Sortierattributs, ist die Reihenfolge der Zeilen undefiniert (aber normalerweise in der Reihenfolge der mit insert() eingefügten Zeilen)
tbl.sort(fieldname, False) dasselbe, aber in absteigender Reihenfolge
tbl.getAttributes() gibt ein Tupel mit den Feldnamen (Attributen) zurück
tbl.view() zeigt die Tabellenwerte formatiert in der Konsole (sortiert gemäss einem Sortierattribut)
tbl.view(fieldname1, fieldname2, ..., pattern) dasselbe, aber es werden nur die angegebenen Felder von Zeilen angezeigt, welche die Gleichheitsbedingungen erfüllen (wie select())
tbl.getView() dasselbe, aber Rückgabe als formatieren String
tbl.getView(fieldname1, fieldname2, ..., pattern) dasselbe, aber es werden nur die angegebenen Felder von Zeilen zurück gegeben, welche die Gleichheitsbedingungen erfüllen (wie select())
print tbl dasselbe wie tbl.view()
len(tbl) gibt die Anzahl Tabellenzeilen zurück
tbl.delete(pattern) löscht alle Zeilen, welche die Gleichheitsbedingungen in pattern erfüllen (wie bei select()). Beispiel: delete(name = "Meyer", vorname = "Hans" löscht alle Zeilen mit Meyer Hans.
tbl.update(pattern)(fieldname1 = value1, fieldname2 = value2,...) ersetzt bestimmte Tabellenwerte. Es werden dazu zwei Parameterklammern verwendet. In der ersten Klammer werden mit pattern wie in select() die Zeilen ausgewählt. In der zweiten Parameterklammer werden die neuen Feldwerte der ausgewählten Zeilen angegeben. Beispiel: update(name = "Meyer", vorname = "Hans")(wohnort = "Basel") setzt den Wohnort aller "Meyer Hans" auf "Basel". Ist die erste Parameterklammer leer, so werden alle Zeilen modifiziert
tbl.join(otherTable, left, right) gibt eine Tabelle zurück, die einer Tabellenverbindung (join) der vorhandenen Tabelle mit otherTable entspricht, wobei die attribute left und right übereinstimmen müssen. Die Vergleichsattribute werden nicht übernommen. Beispiel: person.join(sport, person.id = sport.id)
tbl.join(otherTable, left, right, True) dasselbe, aber es werden auch die Vergleichsattribute übernommen (diese müssen unterschiedliche Namen haben)
tbl.join(otherTable) dasselbe, aber es werden alle Zeilen beider Tabellen miteinander verbunden (Kreuzprodukt)
tbl.save(databaseName, tableName)

speichert die Werte aus table in einer SQL-Datenbanktabelle einer SQLite-Datenbank mit gegebenen Dateinamen unter dem gegebenen SQLite-Datenbank-Tabellennamen. Falls die Datenbank nicht existiert, wird sie erzeugt. Eine bestehende Tabelle mit gleichem Namen wir gelöscht. Die Feldnamen (Attribute) und Datentypen werden übernommen. Wird tableName nicht angegeben, so wird der Variablenname als SQLite-Tabellenname verwendet

tbl.restore(databaseName, tableName) holt die mit saveTable() in der SQLite-Datenbank gespeicherten Werte aus der gegebenen SQLite-Datenbank-Tabelle und gibt ein DbTable-Objekt mit den wiederhergestellten Feldnamen (Attributen) zurück. Wird tableName nicht angegeben, so wird der Variablenname als SQLite-Tabellenname verwendet.
tbl.restoreFromTJ(databaseName, tableName) dasselbe, aber die Datenbank wird zuerst aus der TigerJython-Distribution (tigerjython2.jar) geholt und in das Verzeichnis des Programms kopiert
tbl.importFromCSV(filename, delimiter)

importiert den Inhalt einer CSV-Datei (Textdatei). Die Felder müssen durch das Trennzeichen delimiter getrennt sein. Jede Zeile muss genau die gleiche Anzahl Felder haben. Aus der ersten Zeile wird der Typ der Felder (int, float, str) ermittelt

tbl.exportToCSV(filename, delimiter, fieldname1, fieldname2, ..., pattern) exportiert die Tabellendaten in eine CSV-Datei, wobei die Felder mit dem angegebenen Trennzeichen getrennt sind. Es werden nur die angegebenen Felder übernommen. pattern ist eine Sequenz mit Gleichheitsbedingungen attribute = wert. Fehlen fieldname und pattern, so wird die ganze Tabelle übernommen (wie bei select())
getBytes(filename) gibt einen Bytearray (Typ array.arrray) der Datei filename zurück (absoluter oder relativer Pfad bezüglich des Verzeichnis, in dem sich das Programm befindet)
storeBytes(buffer, filename) schreibt den Bytearray (type array.array) in die Datei filename (ersetzt vorhandene Datei)
showDbInfo(database) schreibt von einer Datenbank alle Tabellennamen und ihre Feldnamen aus
showDbInfoTJ(database) schreibt von einer Datenbank in der TigerJython-Distribution alle Tabellennamen und ihre Feldnamen (Attribute) aus

 

 

home