Jython HomeDruckenJava-Online

Dokumentation Datenbanken


Wichtigste SQL-Befehle

Befehl Aktion
CREATE TABLE tab (feld1 Datentyp, feld2 ..) Erstellt Tabelle tab mit den definierten Feldern
DROP TABLE tab Löscht die Tabelle tab
INSERT INTO tab (feld1, feld2, ...)
VALUES(wert1, wert2, ...)
Fügt in die Felder feld1, feld2,... die Werte wert1, wert2,... ein
INSERT INTO tab VALUES (wert1, wert2, wert3, ...) Falls Werte in alle Felder eingefügt werden, kann man die Aufzählung der Feldnamen weggelassen
DELETE FROM tab WHERE feld = wert Löscht alle Datensätze der Tabelle tab, welche die Bedingung erfüllen. Achtung: Ohne Bedingung werden alle Datensätze gelöscht!
SELECT * FROM tab Wählt aus der Tabelle tab alle Datensätze
SELECT * FROM tab WHERE bedingung Wählt aus der Tabelle tab alle Datensätze, welche die Bedingung erfüllen
SELECT tab1.feld tab2.feld FROM tab1
JOIN tab2 ON tab1.feld = tab2.feld
Tabellenverknüpfung mit JOIN
SELECT tab1.feld tab1.feld FROM tab1, tab2 WHERE tab1.feld = tab2.feld Tabellenverknüpfung mit WHERE
UPDATE tab1 SET feld = wert WHERE bedingung Aktualisiert in der Tabelle tab alle Datensätze, welche die Bedingung erfüllen. Achtung: Ohne Bedingung werden alle Datensätze modifiziert!


SQLite3
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

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)

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 *
con = connect("test.db")
with con:
    con.execute("DELETE FROM people")

Modul import: from dbapi import *

Zugriff auf verschiedene Datenbanken: PostgreSQL, SQLite, MySQL, Derby (über eingebaute 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

Das Datenbank API entspricht weitgehend den Python Database API Specification v2.0.

Modul import: from prettytable import *
Formattierte Ausgabe von Tabellendaten

Befehl Aktion
printTable(cursor)

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

strTable(cursor)

dasselbe, aber gibt das formattierte Resultat als String zurück
printTable(cursor, align = "x") wie oben, aber formattiert 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 formattiert 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