|
Perl bietet die Möglichkeit, mit allen gängigen Datenbanken
zusammenzuarbeiten. Das wird am Beispiel der populärsten frei
erhältlichen Datenbank MySQL demonstriert. Alle hier beschriebenen Komponenten sind in professioneller Qualität legal und kostenfrei erhältlich. |
Perl ermöglicht Datenbank-Zugriff auf Webseiten (das wird meistens mit PHP programmiert) und für die Systemverwaltung (das ist eine besondere Perl-Domäne). |
Perl
|
Scripts für CGI und Systemverwaltung |
| MySQL | Einführung, Voraussetzungen |
| Perl | Voraussetzungen |
| Verbindung | mit einer MySQL-Datenbank |
| Befehlszyklus | SQL-Befehl senden, Ergebnis auswerten |
| Perl Module | Zusatz-Module zur Verwendung von Perl mit Datenbanken |
MySQL Datenbank Server |
|
Datenbank ServerEin Server ist ein Programm, das im Hintergrund läuft, von dem man daher kein Fenster sieht, und das man nicht direkt bedienen lann.Ein Datenbank-(DB)-Server ist auf die Verwaltung von Daten spezialisiert. Er managt Daten fast jeder beliebigen Art und Anzahl, und zwar besonders schnell, effizient und sicher. Ein DB-Server versorgt mehrere (typisch tausende) AnwenderInnen. |
Datenbank ClientZusätzlich zum Server benötigt man Client-Software, die einen Zugang zum Server herstellt, das 'User Interface': Am Client kann man z.B. Such-Abfragen eingeben und hier erhält man die Ergebnis-Listen.Als DB-Client Software werden vorzugsweise dynamische Webseiten verwendet: AnwenderInnen brauchen dann keine spezielle Software für den Datenbank-Zugriff - Ein beliebiger Browser genügt, und zwar auf jedem PC, mit jedem Betriebssystem. |
Dynamische WebseitenHeute erfolgt der Zugang zu Datenbank-(DB)-Servern praktisch nur mehr über ebseiten.Verwenden sie zumindest für neue Projekte keine veraltete Datenbank-Software, selbst wenn sie diese tatsächlich oder illegal kostenlos bekommen. Den MySQL-DB-Server sowie Webseiten erhält man übrigens legal kostenlos. |
Webseiten als Datenbank-Interface dürfen nicht - wie einfache 'statische'
Webseiten - immer gleich aussehen, sondern sie müssen sich an die
wechselnden Wünsche der AnwenderInnen anpassen. Sie werden daher Live
durch eigene Programme erstellt. Als Programmiersprachen für dynamische Webseiten haben sich → PHP und → Perl etabliert. Damit lassen sich rasch und einfach Datenbank-Clients herstellen. |
MySQL Voraussetzungenfür den Zugriff auf eine MySQL-Datenbank mit Perl:► MySQL Datenbank Server installiert und getestet. ► Datenbank test mit mindestens einer Tabelle (z.B. personen) und ein paar Datensätzen eingerichtet. |
Nicht unbedingt erforderlich, aber sehr empfehlenswert: ► MySQL-User root ist durch ein Passwort abgesichert. ► MySQL-User test ist eingerichtet und hat freien Zugriff (nur) auf Datenbank test ► Das Konsolen-(shell)-Programm mysql funktioniert ► Das Standard Verwaltungs-Programm → phpMyAdmin ist installiert und konfiguriert. |
Linux→ MySQL (Server + Client) ist in jeder gängigen Linux-Distribution enthalten. In professionellen Versionen ist der MySQL Server bereits installiert und gestartet, in Desktop-Versionen muss der Befehl zur Installation manuell erteilt werden. Konsultieren sie dazu die Doku ihrer Linux-Distribution.In seltenen Fällen ist es notwendig, MYSQL (kostenfrei) aus dem Internet zu laden. Besuchen sie dazu die Webseite ihres Linux-Distributors: Dort finden sie eine genau an ihre Linux-Version angepasste MySQL-Installation. Nur erfahrene EntwicklerInnen sollten versuchen, sich eine eigene MySQL-Version aus dem Quelltext herzustellen (zu compilieren). |
WindowsMySQL ist als ausführbares Programm (Binary) für Windows kostenfrei erhältlich. Zum Kennenlernen können sie MySQL problermlos am eigenen Win-PC installieren. Für den professionellen Einsatz werden MySQL Server besser auf Linux betrieben.♦ Details zur Installation von MySQL auf Windows. ist eine standardisierte 'Sprache' für den Umgang mit Datenbanken. Alle Datenbank-Server 'verstehen' SQL, natürlich auch MySQL. |
Perl |
|
Perl Voraussetzungenfür den Zugriff auf eine MySQL-Datenbank mit Perl:► Perl installiert und getestet. ► Perl-Module DBI und DBD-mysql installiert |
♣ Tipp: Wenn sie noch keine Erfahrung mit → Perl gesammelt haben, dann sollten sie nicht unbedingt mit diesem Thema beginnen: Probieren sie zuerst einige einfache Konsolen-Programme oder dynamische Webseiten herzustellen. |
LinuxPerl ist in jeder gängigen Linux-Distribution enthalten und installiert. In allen Linux-Server Distributionen sind auch die Perl Datenbank Module gebrauchsfertig installiert. |
WindowsPerl ist für Windows kostenfrei erhältlich. Die Grund-Installation ist einfach, eine professionelle Anpassung erfordert allerdings einige Erfahrung.♦ Details zu Installation und Test von Perl auf Windows. |
Perl-ModuleAuf Linux werden Perl-Module je nach Version unterschiedlich installiert, am besten mit der jeweiligen Software-Paket-Verwaltung.Das Modul DBD-mysql gehört zur Standard-Ausrüstung jeder Distribution. Wenn es fehlen sollte, kann man es vom Linux-Distributor, notfalls auch von |
Auf SuSE-Linux starten sie dann nachund Klick auf die beiden Module DBI und DBD-mysql |
|
Die Suche nach dem Modul DBD-mysql kann mühsam werden. ♥ Auf Win32PerlOrg wird eine Liste von Perl Repositories geführt. |
Installieren sie im Perl Paket-Manager zusätzliche Pfade alternativer
Anbieter von Perl-Modulen, z.B.
C:\> ppm repo add http://theoryx5.uwinnipeg.ca/ppms
Voraussetzung:
→ Perl ist installiert und der Pfad zum Perl Paket
Manager ppm.bat korrekt eingetragen.
C:\> ppm repo add http://www.bribes.org/perl/ppm |
|
Perl Paket Manager:
►
Verbinden sie ihren PC mit dem Internet.► Wenn sie zur Verbindung einen → Router / Proxy-Server verwenden: Die Umgebungs-Variable HTTP_PROXY muss korrekt eingestellt sein. ( → Perl-Installation) ► Starten sie das Programm, z.B. mit C:\> ppm
Das PPM-Fenster wird geöffnet und beginnt die Suche nach Repositorien.
Das kann einige Minuten (!) dauern.► Geben sie mysql in die Such-Zeile ein und klicken sie das Icon Alle verfügbaren Treffer werden angezeigt. ► Wenn sich darunter die Module DBI und DBD-mysql befinden: Markieren sie die Module (), führen sie die Installation aus (Icon ). Das kann einige Minuten dauern, weil auch die komplette Dokumentation installiert wird. ► Wenn die Module nicht verfügbar sind: Suchen sie im Internet nach weiteren Perl Repositorien und tragen sie diese in PPM ein. |
PPM an der Konsole
Alternativ (wesentlich rascher, jedoch mit weniger Komfort) kann man
die beiden Module mit der Konsolen-Version von ppm
installieren. Das funktioniert nur dann, wenn die gesuchten Module in
zumindest einem der installierten Repositorien enthalten sind:
C:\> ppm install dbi
C:\> ppm install dbd-mysql Wenn der Pfad zum ppm in der Umgebungs-Variablen PATH nicht eingetragen ist, dann müssen sie ihn angeben, z.B.:
C:\> c:\programme\perl\bin\ppm install dbi
C:\> c:\programme\perl\bin\ppm install dbd-mysql |
Modul-Test:Wenn dieses Mini-'Programm' fehlerfrei läuft, dann ist das Modul DBI installiert. Es gibt in einer Schleife alle installierten DB-Treiber aus - Das sollte mindestens den Treiber mysql umfassen. |
use DBI;
print "Installed DBI-Drivers:\n"; my %idrv = DBI->installed_drivers; while (($k,$v) = each %idrv) { print "$k\n";
}
|
|
Ältere Versionen kennen noch nicht das mit
installed_drivers zurückgegebene
→ Hash. Verwenden sie in diesem Fall das mit avaliable_drivers zurückgegebene → Array. |
use DBI;
print "Installed DBI-Drivers:\n"; my @drv = DBI->avaliable_drivers; foreach $v(@drv) { print "$v\n";
}
|
WebserverPerl arbeitet mit dem Standard-Webserver Apache sowohl auf → Linux als auch auf → Windows perfekt zusammen.► Wenn sie dynamische Webseiten als Client-Software zur Bedienung eines Datenbank-Servers herstellen wollen, dann ist ein Webserver unbedingt erforderlich. ► Der Server muss für die Arbeit mit Perl eingerichtet und getestet sein. |
Wenn sie Perl als Werkzeug für die Systemverwaltung einsetzen wollen, dann ist ein Webserver nicht erforderlich. Es ist eine besondere Stärke von Perl, Datenbanken zur Systemverwaltung zu nutzen. |
SQL-Befehlszyklus |
|
|
Bei der Arbeit mit Datenbanken ist es üblich, SQL-Befehle zu senden,
danach die Antwort auszuwerten. Dieser Zyklus wird so oft wiederholt, wie das die/der AnwenderIn wünscht. Das Beispiel zeigt, wie ein SQL-Befehl als String $sql erstellt wird, und wie der Befehl mit prepare vorbereitet wird. Der vorbereitete Befehl wird an ein 'Statement Handle' $sth übergeben. Zu einem beliebigen späteren Zeitpunkt wird dieser SQL-Befehl mit execute ausgeführt. |
Voraussetzung: Erfolgreiche Verbindung (Connect) mit
Handle $dbh Vorbereitung und Absenden eines SQL-Befehls:
my $sql = qq{show tables};
my $sth = $dbh->prepare($sql); $sth->execute(); |
|
Das Ergebnis des SQL-Befehls kann auf viele verschiedene Arten ausgewertet werden.
Das Beispiel übergibt die Antwort des Servers mit
fetchrow_array an das Array @ergebnis In diesem speziellen Fall hat die Ergebnis-Liste nur eine Spalte, daher genügt die Ausgabe der ersten Spalte $ergebnis[0] jeder Zeile. |
Auswertung des Ergebnisses
my @ergebnis;
while(@ergebnis=$sth->fetchrow_array) { print $ergebnis[0]." \n";
}
|
| Die Trennung von Vorbereitung und Ausführung der SQL-Befehle ist eine Spezialität von Perl, die im kommerziellen Bereich sehr wertvoll sein kann - Abhängig von der Tarif-Politik des Datenbank-Providers. | Auf eigenen und experimentellen DB-Servern können sie prepare und execute bedenkenlos immer paarweise ausführen. |
|
Wenn die Trennung nicht notwenig ist, dann kann man die beiden Methoden
mit do zusammenfassen. (nur neuere Versionen). |
Zusammenfassung von prepare und
execute
my $rows = $dbh->do($sql);
Die Rückgabe (hier an $rows ) enthält die Anzahl
betroffener Datensätze (records, Zeilen).
|
|
Fast alle verwendeten Methoden sind formal unabhängig vom verwendeten DB-Treiber.
Sie können daher auf jede Standard SQL-Datenbank angewendet werden. Dadurch ist es möglich, mit Perl wirklich kompatible DB-Client Programme zu erstellen, die mit jeder SQL-Datenbank jedes Herstellers arbeiten. |
Das ist ein großer Vorteil von Perl, z.B. gegenüber
→ PHP. In der Praxis ergeben sich trotzdem kleine Unterschiede, weil die Treiber etwas unterschiedlich reagieren. Mit etwas mehr Aufwand für Entwicklung und Test kann man diese Effekte jedoch abfangen und mit Perl absolut kompatible DB-Clients herstellen: Diese Programme laufen nicht nur auf jedem Client-PC sondern arbeiten auch mit allen gängigen DB-Server-Datenbanken. |
|