5. Unterrichtsblock
Python & Datenbanken
Python kann in Datenbankanwendungen verwendet werden. Eine der beliebtesten Datenbanken ist MySQL.
MySQL Installation und Verbindungsaufbau
Um mit den Codebeispielen in diesem Tutorial experimentieren zu können, müssen wir MySQL auf unseren Rechnern installieren. Hierfür installieren wir XAMPP, da wir dies für PHP ebenfalls benötigen.
Stelle sicher, dass XAMPP auf dem Schulrechner installiert ist und der MySQL-Dienst (oft „MariaDB“ in neueren XAMPP-Versionen) läuft. Starte das XAMPP-Kontrollpanel und aktiviere den MySQL-Service.
- Öffne phpMyAdmin über das XAMPP-Dashboard (normalerweise auf
http://localhost/phpmyadmin
zugänglich). - Erstelle eine neue Datenbank für dein Projekt oder verwende eine bestehende.
MySQL Treiber installieren
Python benötigt einen MySQL-Treiber, um auf die MySQL-Datenbank zuzugreifen.
- Hierzu verwenden wir den Treiber „MySQL Connector“.
- Für die Installation von „MySQL Connector“ verwenden wir PIP.
- PIP sollte bereits in unserer Python-Umgebung installiert sein.
- Zur Installation geben wir in die Befehlszeile folgendes ein: PIP und geben Sie Folgendes ein:
-m pip install mysql-connector-python
- Sollte o.g. Code nicht funktionieren, wird via Google oder ChatGPT ein passender Befehl für VS-Code recherchiert
- Sollte der Befehl erfolgreich ausgeführt woden sein, wurde der Treiber installiert
Testen des MySQL Connectors
Um zu testen, ob die Installation erfolgreich war und ob der „MySQL Connector“ installiert wurde, erstellen wir eine Python-Datei mit folgenden Inhalt:
import mysql.connector
Wurde der obige Code ohne Fehler ausgeführt, dann ist der „MySQL Connector“ installiert und betriebsbereit. Der Connektor wird auch benötigt, um die dort vorhandenen Mehtoden und Objekte wie z.B. cursor() zu verwenden.
Verbindung herstellen
Um mit MySQL zu arbeiten, benötigen wir eine Verbindung zur Datenbank. Hierzu verwenden wir den Benutzernamen und das Passwort aus der MySQL-Datenbank:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
print(mydb)
# Jetzt können wir die Datenbank mit SQL-Anweisungen abfragen.
Weiterer Test
import mysql.connector
# Verbindung zum MySQL-Server herstellen
mydb = mysql.connector.connect(
host="localhost",
user="dein_benutzername", # Ändere 'dein_benutzername' zu dem deiner Datenbank
password="dein_passwort", # Ändere 'dein_passwort' zu deinem Datenbankpasswort
database="deine_datenbank" # Ändere 'deine_datenbank' zu dem Namen deiner Datenbank
)
# Cursor-Objekt erstellen
mycursor = mydb.cursor()
# Beispielabfrage
mycursor.execute("SHOW TABLES")
# Abfrageergebnisse verarbeiten
for table in mycursor:
print(table)
# Verbindung schließen
mydb.close()
Datenbank erstellen
Um eine Datenbank in MySQL zu erstellen, verwenden wir die CREATE DATABASE
Anweisung. In folgendem Beispiel wird eine Datenbank mit dem Namen „meinedatenbank“ erstellt:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="nutzername",
password="meinpasswort"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE meinedatenbank")
Wenn der obige Code ohne Fehler ausgeführt wurde, haben wir erfolgreich eine Datenbank erstellt.
Das cursor() Objekt
Der MySQLCursor vom mysql-Connector-Python (und ähnlichen Bibliotheken) wird verwendet, um Befehle auszuführen und mit der MySQL-Datenbank zu kommunizieren.
Mit den dort enthaltenen Methoden aus können wir SQL-Anweisungen ausführen, Daten aus den Ergebnissätzen ziehen und Abfragen ausführen.
Wir können cursor() bzw. das Cursor-Objekt mit der cursor()
-Methode erstellen.
Python SQL Methoden des Cursor Objekts
Es folgen die verschiedenen Methoden der Cursor-Klasse/Objekt.
Nr. | Methode & Beschreibung |
---|---|
1 | callproc() Diese Methode wird verwendet, um bestehende Verfahren MySQL-Datenbank zu nennen. |
2 | close() Diese Methode dient dazu, das aktuelle Cursor-Objekt zu schließen. |
3 | info() Diese Methode gibt Auskunft über die letzte Abfrage. |
4 | executemany() Diese Methode akzeptiert eine Liste der Parameterliste. Bereitet eine MySQL-Abfrage vor und führt sie mit allen Parametern aus. |
5 | execute() Diese Methode akzeptiert eine MySQL-Abfrage als Parameter und führt die angegebene Abfrage aus. |
6 | fetchall() Diese Methode ruft alle Zeilen im Ergebnissatz einer Abfrage ab und gibt sie als Liste von Tupeln zurück. (Wenn wir dies nach dem Abrufen einiger Zeilen ausführen, gibt es die restlichen zurück) |
7 | fetchone() Diese Methode zerfehe die nächste Zeile im Ergebnis einer Abfrage und gibt sie als Tupel zurück. |
8 | fetchmany() Diese Methode ähnelt der fetchone(), aber sie ruft den nächsten Satz Zeilen im Ergebnissatz einer Abfrage anstelle einer Zeile ab. |
9 | etchwarnings() Diese Methode gibt die Warnungen zurück, die durch die letzte ausgeführte Abfrage erzeugt werden. |
Eigenschaften
Im Folgenden stehen einige Attribute der Cursor-Klasse .
Nr. | Eigenschaft & Beschreibung |
---|---|
1 | name Gibt eine Liste mit den Spaltennamen eines Ergebnissatzes aus. |
2 | description Gibt eine Liste mit der Beschreibung von Spalten in einem Ergebnisset aus. |
3 | lastrowid Gibt die ID, des letzten INSERT- oder UPDATE-Wertes aus. |
4 | rowcount Gibt die Anzahl der zurückgegebenen Zeilen im Fall von SELECT- und UPDATE-Operationen aus. |
5 | statusmessage Gibt die letzte ausgeführte Aussage zurück. |
Überprüfen, ob eine Datenbank existiert
Wir können prüfen, ob eine Datenbank vorhanden ist, indem wir alle Datenbanken auflisten. Mit der SHOW DATABASES
Anweisung. Rückgabe eine Liste der Datenbanken eines Systems:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="nutzername",
password="meinpasswort"
)
mycursor = mydb.cursor()
mycursor.execute("SHOW DATABASES")
for x in mycursor:
print(x)
Oder wir können versuchen, auf die Datenbank zuzugreifen, wenn wir die Verbindung herstellen. Beispielhafter Aufbau, einer Verbindung mit der Datenbank „meinedatenbank“ beim Aufbau der Verbindung:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="nutzername",
password="meinpasswort",
database="meinedatenbank"
)
# Wenn es die Datenbank nicht gibt, erhalten wir einen Fehler.
Tabellen erstellen
Um eine Tabelle in MySQL zu erstellen, verwenden wir die CREATE TABLE
-Anweisung. Hierbei stellen wir sicher, dass wir den Namen der Datenbank definieren, wenn wir die Verbindung erstellen
Erstellen einer Tabelle mit dem Namen „Kunden“:
import mysql.connector
# Aufbau der Verbindung
mydb = mysql.connector.connect(
host="localhost",
user="nutzername",
password="meinpasswort",
database="meinedatenbank"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE kunden (name VARCHAR(255), addresse VARCHAR(255))")
Wenn der obige Code ohne Fehler ausgeführt wurde, wurde eine Tabelle erstellt.
Überprüfung, ob eine Tabelle existiert
Wir können überprüfen, ob eine Tabelle existiert, indem wir alle Tabellen in der Datenbank mit der SHOW TABLES
-Anweisung auflisten:
Rückgabe eine Liste aller Datenbanken:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="nutzername",
password="meinpasswort",
database="meinedatenbank"
)
mycursor = mydb.cursor()
mycursor.execute("SHOW TABLES")
for x in mycursor:
print(x)
Primärschlüssel
Wenn wir eine Tabelle erstellen, benötigen wir auch eine Spalte mit einem eindeutigen Schlüssel für jeden Eintrag.
Dies kann durch die Definition eines PRIMARY KEY
geschehen.
Wir verwenden die Anweisung INT AUTO-INCREMENT PRIMARY KEY
, die eindeutige Nummer für jeden Eintrag setzt. Die Anweisung beginnt bei 1 (nicht 0) zu zählen und erhöht sich (inkrementiert) bei jedem weiteren Eintrag um +1.
Erstellen eines primären Schlüssels bei der Erstellung der Tabelle:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="nutzername",
password="meinpasswort",
database="meinedatenbank"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE kunden (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), addresse VARCHAR(255))")
Wenn die Tabelle bereits existiert, verwenden wir das ALTER TABLE
-Schlüsselwort:
Erstellen eines Primärschlüssel in einer vorhandenen Tabelle:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="nutzername",
password="meinpasswort",
database="meinedatenbank"
)
mycursor = mydb.cursor()
mycursor.execute("ALTER TABLE kunden ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")
Aufgaben
- Erstelle eine Datei, die die nötigen Funktionen über Module einbindet, die Du baust
- Erstelle ein Modul das:
- Eine Datenbank mit mehreren Tabellen erstellt
- Befülle die Tabellen mit Inhalt
- Versuche dabei Schleifen anzuwenden
- Frage den Inhalt ab und erstelle hierfür ein Modul, welches de Code dafür enthält
- Erstelle eine Funktion, die prüft, ob ein bestimmter Wert in der Datenbank enthalten ist
- Die Eingabe der Abfrage soll über eine Input-Funktion erfolgen