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).
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 |
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 |
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")
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 *
Formatierte Ausgabe von Tabellendaten
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 |