Erstellen der Datenbank

(Auszug aus "Python & XML" von Christopher A. Jones & Fred L. Drake, Jr.)

Es würde den Rahmen dieses Buches sprengen, die Installation einer bestimmten Datenbank zu beschreiben. Wenn Datenbanken für Sie jedoch etwas völlig Neues sind, zeigen wir in einer kurzen Übersicht, wie diese bestimmte Datenbank aufgesetzt und in diesem Beispiel benutzt wurde. Diese Übersicht gilt weitestgehend für alle Datenbanksysteme, inklusive SQL Server, Postgres und MySQL. Als Python-XML-Entwickler, der Anwendungen zusammenkittet, wird es Ihnen gut tun, wenigstens die Grundlagen davon zu verstehen, wie man mit Datenbanken arbeitet.

Wir haben beim Erstellen dieses Beispiels SQL Server von Microsoft als relationale Datenbank benutzt. Es wird jedoch nur eine einfache Tabelle erzeugt, und jede Datenbank, die SQL-Abfragen unterstützt, sollte dafür ebenso ausreichen. Ein SQL-Skript, das Tabellen erzeugt, wird angegeben und sollte eigentlich auf jeder SQL-Plattform funktionieren. Der hier vorgestellte Python-Code für die Verbindung zur Datenbank benutzt ODBC. Wenn Sie lieber eine andere Datenbank statt SQL Server benutzen möchten, müssen Sie eventuell eine Python-API herunterladen, um sie ansprechen zu können. Die MySQLdb-API z. B. ist unter SourceForge: MySQL for Python verfügbar und bietet aus Python einen Zugang zu MySQL-Datenbanken. Unabhängig von Ihrer Verbindungs-API sollten die in diesem Abschnitt gezeigten SQL-Befehle identisch sein.

Erzeugen einer Profil-Datenbank

Nachdem Sie die Datenbank Ihrer Wahl installiert haben, ist Ihre erste Aufgabe, eine Datenbank im System zu erzeugen. Wenn Sie SQL Server benutzen oder Ihre Datenbank eine Administrations-GUI anbietet, kann dieser Vorgang daraus bestehen, einen Datenbanknamen in eine Dialogbox einzugeben. Mit SQL Server z. B. suchen Sie einfach das Verzeichnis der Datenbanken im SQL Enterprise Manager. Dort wählen Sie mit einem Klick auf die rechte Maustaste Neue Datenbank aus. Der Name der Datenbank sollte Profiles sein. Wenn Sie keine GUI haben, sollte folgende einfache SQL-Anweisung genügen:

 CREATE DATABASE Profiles 

Wenn Sie soweit sind, möchten Sie vielleicht einen Benutzer anlegen und aktivieren, der Lese- und Schreibrechte auf dieser Datenbank, aber nicht auf anderen hat. Konsultieren Sie Ihre Datenbank-Dokumentation hinsichtlich der Details, wie bestimmte Benutzerkonten angelegt werden. Für dieses Beispiel wurde in SQL Server der Benutzer webuser mit dem Paßwort w3bus3r erzeugt. Diese Authentifizierungsinformation wird im Code für die ODBC-Verbindung benötigt.

Erstellen einer Kundentabelle

Nachdem Sie mit einer GUI oder mit SQL-Anweisungen eine Datenbank erzeugt haben, legen Sie eine einfache Tabelle namens Customer an. Diese Tabelle enthält einige grundlegende Benutzerinformationen. Sie wird von den verschiedenen verteilten Anwendungen als der ausschließliche Ort von Kundeninformationen benutzt. Die Felder in dieser Tabelle decken zwar nur die grundlegendsten Dinge ab, aber Sie könnten sie ganz einfach durch andere Arten von systembezogenen Informationen ergänzen.

Die Tabelle Customer kann mit einer GUI in SQL Enterprise Manager for SQL Server oder mit folgendem SQL-Code in jeder Datenbank erzeugt werden:

CREATE TABLE Customer (
       firstname varchar (255) NULL,       
       lastname varchar (255) NULL,
       address1 varchar (255) NULL,
       address2 varchar (255) NULL,
       city varchar (255) NULL,
       state varchar (2) NULL,
       zip varchar (10) NULL,
       customerId varchar (40) NULL)

Diese Tabelle ist sehr einfach. Alle Datentypen sind varchar und können in Python sehr einfach als Strings und Ganzzahlen behandelt werden. Was man bei der Customer-Tabelle beachten sollte, ist die variierende Länge der verschiedenen Felder. Die meisten können zwischen 0 und 256 Zeichen lang sein. Andere müssen jedoch einige Beschränkungen erfüllen, z. B. zwei Zeichen bei der Abkürzung des Bundesstaates und eine Beschränkung auf 10 Ziffern bei der Postleitzahl.

Wenn Sie SQL Server benutzen, vergessen Sie nicht, Ihre neue Datenbank als ODBC-Quelle auf dem Rechner anzumelden, auf dem Sie irgendwelche Datenbank-Clients laufen lassen. In dieser Beispielanwendung braucht nur der XML-Switch, der die CustomerProfile-Klasse lädt, eine Datenbankanbindung. Um die Verbindung zum SQL Server herzustellen, benutzen Sie den ODBC-Manager im Windows-Systemsteuerung-Panel, um Ihre Datenbank auszuwählen. Nachdem dies geschehen ist, wird der hier vorgestellte ODBC-Code funktionieren.

Füllen der Datenbank

Sie können die Felder in Ihrer neuen Tabelle mit einer SQL-Anweisung ähnlich zu folgender füllen:

insert into Customer values('John',   
   'Smith',
   '123 Evergreen Terrace',
   '',
   'Podunk',
   'WA',
   '98072',
   '234-E838839')

Diese Anweisung erzeugt eine neue Zeile in der Datenbanktabelle mit den entsprechenden Werten in Anführungszeichen. Wenn Sie Ihre Datenbank mit mehreren Zeilen füllen möchten, können Sie zur guten alten Dateneingabe Zuflucht nehmen und dazu das im folgenden Beispiel gezeigte Skript popdb.py benutzen. Dieses einfache Skript liest lediglich die Eingabe von der Kommandozeile und fügt sie in die Datenbank ein. Es ist für den Gebrauch mit dem ODBC-Modul und SQL Server gedacht. Wenn Sie also eine andere Datenbank verwenden, müssen Sie den Code anpassen, der die Verbindung zur Datenbank herstellt.

Beispiel: popdb.py

"""
popdb.py - Füllen der Profile/Kunden-DB mittels ODBC-Aufrufen
"""
import dbi, odbc
conn = odbc.odbc("Profiles/webuser/w3bus3r")
cmd = conn.cursor()

# Schleife für die Eingabewerte
while 1:    
    firstname = raw_input("Vorname:")
    lastname = raw_input("Nachname:")
    address1 = raw_input("Adresse1:")
    address2 = raw_input("Adresse2:")
    city = raw_input("Ort:")
    state = raw_input("Land, max. 2 Buchstaben:")
    zip = raw_input("PLZ, max. 10 Ziffern:")
    customerId = raw_input("Kunden-ID, max. 40 Zeichen:")
    
    # Ausführen der SQL-Anweisung
    cmd.execute("insert into Customer values('"
                + firstname + "', '"
                + lastname + "', '"
                + address1 + "', '"
                + address2 + "', '"
                + city + "', '"
                + state + "', '"
                + zip + "', '"
                + customerId + "')")
    
    # Frage nach weiteren Einträgen
    finished = raw_input("weiter? [j/n]:")
    if (finished == "n"):
        break

Da es keinerlei Fehlerbehandlung in popdb.py gibt, erhalten Sie eine Ausnahme, wenn Sie eine der Tabellenbeschränkungen verletzen, und die entsprechende Zeile wird nicht eingefügt.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Python & XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2002 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Python & XML" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de