DB-Zugriff über Python - Beispiel
Vielleicht hast du ja das Beispiel ganz am Anfang des Kapitels ausprobiert, bei dem dynamisch aus der terra-DB Orte in einer Karte markiert wurden. Für die Webseite wurde dies mit der Sprache PHP realisiert. Aber ist das auch in Python möglich?
Vorbereitung von Python
Python bringt von sich aus schon viele Bibliotheken mit, um die Funktionalität zu erweitern (sicher hast du schon einige davon verwendet, wie z.B. random, turtle oder math). Auch für den Zugriff auf eine MySQL (oder MariaDB)-Datenbank gibt es eine solche Bibliothek, die du aber leider erst noch herunterladen und installieren musst.
Unter dem Link http://dev.mysql.com/downloads/connector/python/ findest du den sogenannten MySQL Connector für Python. Lade die Version für deine Python-Version herunter (du musst dich dafür nicht bei Oracle anmelden - der Link zum direkten Download ist etwas versteckt). Deine Python-Version findest du z.B., wenn du den Python-Interpreter (Idle) startest oder mit folgendem Python-Befehl:
import sys
print(sys.version)
Installiere dann den Connector; dafür brauchst du leider in der Regel Administrationsrechte auf deinem Rechner, evtl. muss dein Lehrer da helfen.
Ein erstes Beispiel
Jetzt kannst du schon das erste Beispiel einmal ausführen (Quelltext). Das folgende Programm greift auf die terra-DB zu und gibt die Namen und Einwohnerzahlen der Kontinente aus. Dazu musst du das Programm aber wahrscheinlich etwas anpassen:
- Als Servername kannst du
localhost
verwenden, wenn die Datenbank auf deinem Rechner läuft. Hast du MySQL (oder MariaDB) überhaupt schon gestartet? - Der Benutzer
webterra
ist vielleicht noch vorhanden, wenn du das letzte Kapitel bearbeitet hast. Ansonsten kannst du zum Test auch einmal das Administratorkonto (root) verwenden. - Das Passwort musst du anpassen (oder du hast dir im letzten Kapitel kein gutes Passwort vergeben).
import mysql.connector # neue Bibliothek
Servername = 'localhost' # Rechnername (localhost ist dein eigener Rechner)
Benutzer = 'webterra'
Passwort = 'pwd'
Datenbank = 'terra'
# Verbindung mit der Datenbank
con = mysql.connector.connect(host=Servername)
con.cmd_change_user(username = Benutzer, password = Passwort)
con.database = Datenbank
# SQL-Befehl ausführen
cursor = con.cursor()
SQLBefehl = 'SELECT Name, Einwohner FROM kontinent'
cursor.execute(SQLBefehl)
# Durchlaufen der Ergebnisse
row=cursor.fetchone()
while (row!=None):
print(row[0], row[1])
row = cursor.fetchone()
# Ende der Verarbeitung
cursor.close()
# Abmelden
con.disconnect()
Hinweis
In einigen Versionen des MySQL-Connectors scheint es Probleme mit der Funktion cmd_change_user
zu geben.
In diesem Fall kannst du die drei Zeilen 9 und 10 durch Folgendes ersetzen:
con = mysql.connector.connect(
host = Servername,
user = Benutzer,
password = Passwort)
Aufgabe
Vollziehe die wesentlichen Elemente des Programms nach. Ändere es so ab, dass es
- Die Namen und Einwohner aller Orte in Rheinland-Pfalz ausgibt.
- Auch noch die Länge und Breite der Orte angezeigt werden.