![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
gfsql beruht auf gfplus -- der Gadfly-Shell!
Gadfly ist eine relationale Datenbank mit SQL-Schnittstelle unter Python,
sie wurde entwickelt von Aaron Watters. Gfplus ist eine textbasierte
Gadfly-Shell von Jeff Berliner. gfsql bindet gfplus in eine Fensterumgebung unter Tkinter
ein, Ziel ist ein einfache Arbeitsumgebung für Gadfly. Eine
Beispielsitzung:
Im Fenster oben findet die Sitzung statt, hier werden
SQL-Anweisungen eingegeben, GF>
ist der gfsql-Prompt.
Eine SQL-Anweisung wird immer mit einem Strichpunkt ; beendet, geht sie
über mehrere Zeilen, so verändert sich der gfsql-Prompt zu ...
, falls man zwischenzeitlich <F1> (=Befehl ausführen) gedrückt hat. Betätigen der RETURN- oder ENTER-Taste ergibt eine neue Zeile ohne den gfsql-Prompt GF>
.
Im unteren Fenster werden Ergebnisse von Anfragen dargestellt: Das sind beispielsweise
diejenigen Datensätze, die die SELECT-Anfrage erfüllen. Zusätzlich werden im unteren Fenster Fehlermeldungen und alte Sitzungen angezeigt. In der blauen
Titelzeile wird der Name der momentan geöffneten Datenbank angezeigt. Für die Umsetzung von
gfsql wurden mehrere Tkinter-Routinen (tkSimpleDialog.py,
tkDirectoryChooser.py) von Fredrik Lundh benutzt.
über den Button
, es öffnet sich folgendes Fenster:
Gadfly-Datenbanken haben die Endung '*.gfd', die Tabellen zu den gadfly-Datenbanken haben die Endung '*.grl'.
<<<![]() |
Öffnet eine Datenbank |
![]() |
Zeigt die Tabellen der momentan geöffneten Datenbank in einem neuen Fenster an. Beachte: das Fenster ist kontextsensitiv |
![]() |
Schliesst die momentan geöffnete Datenbank, die Datenbank wird im aktuellen Zustand gespeichert! |
![]() |
Öffnet eine alte Sitzung im unteren Fenster, Befehle können über Markieren, Kopieren & Einfügen in das obere Fenster übernommen werden. |
![]() |
Führt den SQL-Befehl auf der momentan geöffneten Datenbank aus, alternativ: die Funktions-Taste <F4> |
![]() |
Gibt die letzte SELECT-Anfrage als Pretty-Print-Tabelle aus, alternativ: die Funktions-Taste <F8> |
![]() ![]() |
Der NEXT-Button führt beim Abarbeiten einer Datei von SQL-Befehlen den nächsten Befehl aus, normalerweise deaktiviert! |
![]() ![]() |
Vorheriger Befehl (alternativ: F5 ) bzw.
nächster Befehl (alternativ: F6 ) für den internen Puffer der
SQL-Befehle.
|
<<<
![]() |
Im Datei-Menü kann eine alte Sitzung geöffnet oder
eine aktuelle Sitzung gespeichert werden.
Über SQL-Datei einlesen kann eine
Text-Datei mit SQL-Befehlen geöffnet und abgearbeitet werden. Es können auch
Original-Sitzungs-Dateien geöffnet werden. Der bearbeitete SQL-Befehl wird im Fenster
oben angezeigt. Bewirkt der SQL-Befehl eine Ausgabe, so wird sie im unteren Fenster
dargestellt. Die beiden Befehle Fenster oben
bzw. unten leeren schaffen Übersicht. Der Befehl DB speichern &
schliessen beendet gfsql und speichert die momentan geöffnete
Datenbank Der Befehl Beenden beendet zwar gfsql, aber die momentan geöffnete Datenbank wird nicht
gespeichert! |
![]() |
Neben Datenbank öffnen und schliessen, Befehl ausführen
(alternativ: die Funktions-Taste <F4>), Tabellen zeigen, DB-Schema (zeigen) und Tabellendefinition zeigen
kann auch eine neue Datenbank erstellt werden: Hierzu muss der Datenbank
erst ein Name gegeben werden, danach kann man mit dem SQL-Befehl CREATE
die Struktur der Tabellen (Relationen) eingeben. DB-Info öffnet ein Fenster
mit statistischen Daten der momentan geöffneten Datenbank. Der Punkt History
öffnet ein Unter-Menü, in dem die letzten fünf geöffneten Datenbanken angezeigt
werden. Über SQL-Fragment wird ein Unter-Menü mit SQL-Code geöffnet, das
entsprechende SQL-Fragment wird in das obere Fenster eingefügt, einfach ausprobieren!
Über Lösche Befehlsliste wird der interne Puffer der SQL-Befehle (Tasten
<F5> und <F6>) zurückgesetzt.
Der Punkt: "Exportiere Datenbank" bewirkt den kompletten (!) Export der momentan
geöffneten Datenbank als Textdatei, dagegen speichert
"Dia-Export" das Datenbank-Schema (die CREATE -Befehle) als Textdatei. Mit Hilfe von autodia kann man mit dem Datenbank-Schema UML-Diagramme für Dia erzeugen.
gfsql kann auch als Gadfly-Client
im Client/Server-Modus benutzt werden.
|
![]() |
In den Einstellungen kann auf die englische Konfiguration umgestellt werden. Daneben können die aktuellen Einstellungen angezeigt, geladen oder abgespeichert werden. Der Punkt "History-Liste neu laden" lädt die Liste der letzten fünf geöffneten Datenbanken neu, siehe beispielsweise die Datei gfsql_dblist.ini . |
![]() |
Das Hilfe-Menü |
![]() |
Daneben gibt es für das obere und das untere Fenster noch ein Popup-Menü: einfach im betreffenden Fenster auf die rechte Maustaste. |
<<<
Im Menü können über Einstellungen die aktuellen Einstellungen verändert werden, sie sind in der Datei "gfsql.ini" gespeichert:
Im Punkt "Start-Sprache" kann die Sprache eingestellt werden, in der gfsql starten soll. Bei "locale" wird versucht, die Systemeinstellung zu benutzen.
Gfsql kann als Gadfly-Client verwendet werden, hierzu kann zuerst die Verbindung mit dem Gadfly-Server überprüft werden (Empfohlen!). Dies bewirkt der Punkt "Verbindung testen".
Bei der "Schrittweisen Ausführung" geht es um die Ausführung von SQL-Dateien: sie können Befehl für Befehl ausgeführt werden (=schrittweise Ausführung!) oder eben komplett, d. h. alle SQL-Befehle aus der SQL-Datei werden ohne Unterbrechung abgearbeitet. Die schrittweise Ausführung kann mit der Esc-Taste abgebrochen werden.
Die Strg-Taste holt den nächsten Befehl bei der schrittweisen Ausführung.
Der Punkt "Fenster löschen" bewirkt beim Öffnen einer Datenbank das Leeren des oberen/unteren Fensters. Gleichzeitig wird auch die Historie der eingegebenen SQL-Befehle (Taste F5 bzw. F6) neu initialisiert, soll heißen: die ganze Geschichte beginnt von neuem . . .
Aufruf: Doppelklick auf
Alternativ: unter Windows pythonw.exe gfsql.pyw
unter Linux: python gfsql.pyw
im gfsql-Verzeichnis aufrufen. Vergleiche unter Linux auch die einfache shell-Datei gfsql.sh
(Pfad anpassen!)
Das Arbeiten mit gfsql wird über Markieren, Kopieren und Einfügen wesentlich erleichtert! Deshalb sollte man unbedingt Sitzungen sichern, die Sitzungen werden als Textdateien gespeichert. Beim Öffnen dieser Textdateien wird der Inhalt im unteren Fenster von gfsql angezeigt. Alternativ kann man über den Befehl SQL-Datei einlesen
auch eine Sitzungsdatei im oberen Fenster
abarbeiten lassen: die schrittweise Ausführung erlaubt eine Ausführung Befehl für Befehl. Sie kann mit der Esc-Taste abgebrochen werden. Die
Strg-Taste führt den jeweils nächsten Befehl aus. Ist die schrittweise Ausführung in den Einstellungen ausgeschaltet, so werden alle SQL-Befehle aus der SQL-Datei ohne Unterbrechung vollständig abgearbeitet!
Es gibt in gfsql eine History-Funktion: über <F5> kann man die vorherigen Befehle abrufen, über <F6> geht es in die andere Richtung. Man gebe einfach mehrere Befehle im oberen Fenster ein und probiere dann <F5> beziehungsweise <F6>.
Wichtig: Die über SQL-Datei einlesen
verarbeiteten SQL-Befehle werden in die History-Liste aufgenommen, können also über die Tasten <F5> beziehungsweise <F6> abgerufen werden. Über "Lösche Befehlliste" im Menü Datenbanken kann man die Befehlliste auf "Null" setzen, sprich neu initialisieren.
Über SQL-Fragment wird ein Unter-Menü mit (unvollständigem!) SQL-Code geöffnet:
Das entsprechende SQL-Fragment wird in das obere Fenster eingefügt, muss aber noch nachbearbeitet werden :-)
Mit der Tastenkombination <F8>
kann die jeweils letzte SELECT-Anfrage als Pretty-Print-Tabelle dargestellt werden, Beispiel (gleiche Abfrage wie oben
!):
Über Als HTML sichern
kann man das Ergebnis der letzten SELECT-Anfrage auch als HTML-Datei abspeichern.
Den physikalisch belegten Speicher und die Anzahl der Datensätze bzw. der Tabellen erhält man über DB-Info im Menü Datenbanken:
Der Punkt History im Menü Datenbanken erlaubt den Zugriff auf die letzten fünf geöffneten Datenbanken.
Zur Arbeit mit commit & rollback: gfsql speichert Daten nicht sofort physikalisch auf der Festplatte (!), sondern behält die Daten im Speicher! Man muss deshalb gfsql zum Abspeichern des aktuellen Zustandes explizit auffordern, hierzu dient der Befehl commit. Beispiel:
GF> commit;
Beim Schliessen der Datenbank wird ebenfalls der aktuelle Zustand gespeichert, will man jedoch "zwischendrin" die Änderungen an der Datenbank rückgängig machen, so benutze man den Befehl rollback. Beispiel:
GF> rollback;
Die Datenbank wird dann zurückgesetzt auf den letzten gespeicherten Zustand, technisch ausgedrückt: die Transaktion wird abgebrochen. Andererseits hat man mit dem Befehl commit die Möglichkeit, einen Zwischenzustand bei der Arbeit mit einer Datenbank physikalisch zu sichern.
Welche Datentypen stehen in gfsql zur Verfügung? Da gfsql auf gadfly aufbaut, kann man folgende Datentypen benutzen:
Es fehlt also insbesondere ein Datentyp für die Uhrzeit und das Datum. Nebenbei: der Wert NULL steht in gfsql auch nicht zur Verfügung. Weitere "Unzulänglichkeiten":
Ansonsten ist der SQL-Standard relativ vollständig implementiert, näheres hierzu findet man in der Sprachbeschreibung von Aaron Watters.
<<<Im Menü Datenbanken findet sich der Punkt: Gadfly-Client
. Gadfly kann im Client/Server-Modus betrieben werden, hierbei kann man gfsql als Gadfly-Client benutzen. Dazu sind vier Angaben notwendig, die man vom Datenbank-Administrator erhält, der Gadfly im Server-Modus startet, Beispiel:
Wird beispielsweise der Gadfly-Server mit folgenden Angaben gestartet:
python gfserve.py 8888 test dbtest admin
(Bedeutung: starte gfserve.py mit der Datenbank test im Verzeichnis dbtest über den Port 8888 unter der Zugriffsberechtigung admin) so muss man sich folgendermaßen anmelden:
Statt der Netzwerkadresse 127.0.0.1
kann auch der Name des entsprechenden Hosts angegeben werden, hier also localhost
. gfsql überprüft den Verbindungsaufbau (siehe Einstellungen), kommt keine Verbindung zustande, so wird eine Fehlermeldung ausgegeben:
Näheres zur Benutzung von Gadfly im Client-Server-Modus entnehme man der Originaldokumentation von A. Watters.
<<<Hinweis: die folgenden beiden Abschnitte befinden sich auch in der Hilfe-Datei von gfsql unter dem Menü-Punkt Hilfe
(alternativ <F1>
).
Beispiele ( GF>
ist der gfsql-Prompt):
GF> CREATE TABLE mytest (id integer, inhalt varchar);
GF> INSERT INTO mytest (id, inhalt) VALUES (1,'hallo');
GF> DESC mytest;
GF> DROP TABLE mytest;
GF> DELETE FROM mytest
WHERE inhalt = 'hallo';
GF> UPDATE mytest
SET inhalt = 'gfsql'
WHERE id = 1;
GF> SELECT * FROM mytest;
GF> SELECT inhalt FROM mytest;
GF> SELECT * FROM mytest
ORDER BY id;
GF> CREATE UNIQUE INDEX indexid
ON mytest (id);
GF> CREATE VIEW mini
AS SELECT inhalt
FROM mytest;
GF> DROP VIEW mini;
!BEACHTE den Strichpunkt ; am Ende eines Befehls!
|
Ansonsten vergleiche man den SQL-Tutor.
<<<Befehle in gfsql:
<SQL Anweisung>;
|
Eine SQL Anweisung in gfsql eingeben (mit ; beenden!) |
desc <relation>;
|
Zeigt alle Spalten einer Relation an |
commit;
|
Der aktuelle Zustand der Datenbank wird gesichert |
rollback;
|
Die Datenbank wird auf den letzten (!) gespeicherten Zustand zurückgesetzt |
Tastenkombinationen in gfsql:
<F1>
|
Öffnet das Hilfe-Fenster |
<F4>
|
SQL Anweisung (mittels gadfly) ausführen (alternativ: <Alt> + X) |
<F5>
|
Vorherige SQL-Anweisung abrufen (alternativ: <Alt> + P) |
<F6>
|
Nächste SQL-Anweisung abrufen (alternativ: <Alt> + N) |
<F8>
|
Letzte SELECT-Anfrage als PrettyPrint-Tabelle (alternativ: <Alt> + T) |
<Strg>
|
Nächster Befehl bei der schrittweisen Ausführung einer SQL-Datei |
<Esc>
|
Abbrechen der schrittweisen Ausführung |
<Alt> + C
|
Leert das obere Fenster |
<<<
gfsql erfordert Python in der Version 2.0 aufwärts, Tkinter sowie die Tkinter-Erweiterung Tix.
Die Installation von gfsql umfasst folgende Schritte:
gfsql.zip
(Windows) bzw. von gfsql.tar.gz
(Linux) in ein Unterverzeichnis, die zum Arbeiten mit gfsql notwendigen Dateien von Gadfly werden mitinstalliert, aber: Dies ist keine vollständige Version von Gadfly! Bei der Installation wird das Unterverzeichnis gmodule
angelegt, in dem sich die Gadfly- und gfsql-Module befinden.gfsql.pyw
: Beim ersten Start von gfsql.pyw
erzeugt der Python-Interpreter zu den Python-Skripten im gfsql-Unterverzeichnis einen Zwischencode, so dass der erste Aufruf etwas länger dauert. Danach sollte es etwas schneller gehen :-) Während der Installation werden keine Veränderungen in der Registry vorgenommen (oder sonstwo . . .). gfsql wurde getestet unter Windows 98, Windows NT 4.0, Windows XP und Linux. An dieser Stelle ein herzliches Danke Schön an die Schüler des Informatik-Grundkurses der Jahrgangsstufe 12/13 (Schuljahr 2001/2002) der Schule am Ried, ihr ward großartige Beta-Tester! Mir bleibt nur noch folgender
Hinweis: gfsql wurde vor allem zu didaktischen Zwecken geschrieben! Es ist nicht gedacht für die Entwicklung von großen & kritischen Datenbanken. Sondern: um SQL zu lernen . . .
Have Fun!
Many Thanks to
Da gfsql auf Gadfly beruht, steht auch gfsql unter der BSD-Lizenz.
<<<