TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken

Dokumentation Datenbanken

Module imports: 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 die Werte der gegebenen Feldnamen. pattern ist wie in select() definiert. Beispiel: update(name = "Meyer", vorname = "Hans")(wohnort = "Basel") setzt den Wohnort aller "Meyer Hans" auf "Basel"
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.saveTable(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.restoreTable(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 Variablen 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 (Typ array.arrray) 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

 

Tabellen der Datenbank tigerjython.db (in tigerjython2.jar integriert)

restoreFromTJ("tigerjython.db")

Tabelle Feldnamen Anzahl Datensätze
babynames rank, forename 100
boynames rank, forename 50
girlnames rank, forename 50
firstnames fname, fwoman, fman 54'379
flags country_code, flag 248
countries country_en, country_de, country_code, continent, capital, .... 249
capitals city_en, city_de, country_code, population... 240
meantemp country, 1900, 1901, 1902, ....2015 89
mountains name, county, hight 28
topsongs title, artist, rank 100