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 installieren musst.
Dafür brauchst du leider evtl. Administrationsrechte auf deinem Rechner, hier muss dein Lehrer/deine Lehrerin da helfen.
Mit dem Werkzeug pip
können zusätzliche Bibliotheken installiert werden:
Für Thonny kann die Bibliothek für MySQL nachträglich installiert werden. Lade dazu die *.whl
-Datei unter
pypi.org herunter (nicht speziell für ein Betriebssystem ...none-any.whl
).
Solltest du keine MySQL-Datenbank zur Verfügung haben, findest du am Ende des Kapitels Hinweise zur Nutzung von SQLite.
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,
user = 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()
con = mysql.connector.connect(host=Servername)
con.cmd_change_user(username = 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.
SQLite als Alternative
Falls du keine MySQL-Datenbank zur Verfügung hast, kannst du (mit ein paar Einschränkungen) alle Übungen auch mit einer lokalen SQLite-Datenbank ausprobieren:
- Lade dazu die terra-Datenbank als SQLite-Version herunter: terra.sqlite
- Lege die Datenbank in ein Verzeichnis, in dem auch deine Python-Programme sein werden.
- Das Python-Programm von oben sieht dann wie folgt aus:
Beachte, dass ab Zeile [6] alles identisch ist, nur die letzte Zeile (con.disconnect()
) entfällt.
import sqlite3 # Bibliothek für SQLite (in Python-Standard vorhanden)
# Verbindung mit der Datenbank
con = sqlite3.connect('terra.sqlite')
# 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()