i

DB-Zugriff über Python - Beispiel

SQL Fenster 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:

Gruppieren
  1. Rufe die Eingabeaufforderung in Windows auf: Befehl cmd.
  2. Wechsle dort in das Verzeichnis von Python, meist: cd \Program Files\Python...
    Tipp: Wenn du den ersten ein/zwei Buchstaben des Verzeichnisses getippt hast, drücke die Tab-Taste.
  3. Wechsle in das Verzeichnis "Scripts".
  4. Installiere die Bibliothek mit dem pip-Werkzeug: pip install mysql-connector-python
  5. Der Aufruf endet (hoffentlich) mit einer Erfolgsmeldung.

Klicke auf die einzelnen Schritte zur Veranschaulichung.

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).

Gruppieren
  1. Der Aufruf des Import führt zu einer Fehlermeldung.
  2. Im Menü "Werkzeuge / Verwalte Pakete" können weitere Pakete installiert werden.
  3. Wähle "Installiere mit lokalen Dateien" aus.
  4. Suche die heruntergeladene *.whl-Datei. Diese wird dann installiert.
  5. Das neue Paket ist in der Liste sichtbar und kann verwendet werden.

Klicke auf die einzelnen Schritte zur Veranschaulichung.

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()
Eigentlich veranschaulichen die folgenden beiden Zeilen besser, was passiert (sie ersetzen die Zeilen 9-12. In neueren Versionen des MySQL-Connectors scheint es aber nicht mehr möglich zu sein, sich ohne Benutzer zu verbinden.
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

  1. Die Namen und Einwohner aller Orte in Rheinland-Pfalz ausgibt.
  2. 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:

  1. Lade dazu die terra-Datenbank als SQLite-Version herunter: terra.sqlite
  2. Lege die Datenbank in ein Verzeichnis, in dem auch deine Python-Programme sein werden.
  3. 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()

Suche

v
3.4.3.1
inf-schule.de/datenbanksysteme/zugriff/pythonzugriff/einstieg_bsp
inf-schule.de/3.4.3.1
inf-schule.de/@/page/Wf2iJ7F2CDM8GtlE

Rückmeldung geben