MySQL Einstieg
Lerne, wie du Python mit MySQL verbindest. Behandelt Installation, Verbindungsaufbau, Datenbankerstellung und erste Abfragen.
Python kann über den offiziellen MySQL Connector/Python-Treiber mit MySQL-Datenbanken kommunizieren. Dieses Kapitel zeigt dir, wie du den Treiber installierst, eine Verbindung herstellst, eine Datenbank erstellst und deine ersten Abfragen ausführst — eine solide Grundlage, bevor du zu Tabellen erstellen, Zeilen einfügen und Daten abfragen übergehst.
Was du brauchst
Bevor du Code schreibst, müssen zwei Dinge bereitstehen:
- Python 3.7 oder höher auf deinem Rechner installiert.
- Ein laufender MySQL-Server — entweder eine lokale Installation (MySQL Community Server) oder eine Cloud-Instanz (PlanetScale, Amazon RDS usw.).
Du musst keine Datenbank im Voraus erstellen; du wirst in einem späteren Abschnitt eine aus Python heraus erstellen.
MySQL Connector/Python installieren
MySQL Connector/Python ist der offizielle MySQL-Treiber, der von Oracle gepflegt wird. Installiere ihn mit pip:
pip install mysql-connector-pythonÜberprüfe die Installation:
import mysql.connector
print(mysql.connector.__version__)
# Example output: 8.4.0Wenn du eine Versionsnummer siehst, ist der Treiber einsatzbereit.
Warum mysql-connector-python und nicht PyMySQL?
Beide Treiber funktionieren, aber mysql-connector-python ist der offiziell von Oracle unterstützte Treiber. Er verwendet standardmäßig eine reine Python-Implementierung und optional eine C-Erweiterung für bessere Leistung. PyMySQL ist eine beliebte Community-Alternative mit nahezu identischer API. Die Kapitel in diesem Abschnitt verwenden mysql-connector-python.
Verbindung zu einem MySQL-Server herstellen
Verwende mysql.connector.connect(), um eine Verbindung zu öffnen. Übergib deine Anmeldedaten als Schlüsselwortargumente:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
if connection.is_connected():
print("Connected to MySQL Server")
connection.close()Ersetze yourusername und yourpassword durch deine tatsächlichen Anmeldedaten. Der Wert für host ist "localhost", wenn MySQL auf demselben Rechner läuft; verwende eine IP-Adresse oder einen Hostnamen für einen Remote-Server.
Anmeldedaten aus dem Quellcode fernhalten
Das Hardcodieren von Passwörtern in Skripten ist ein Sicherheitsrisiko. Speichere sie in Umgebungsvariablen und lies sie zur Laufzeit aus:
import mysql.connector
import os
connection = mysql.connector.connect(
host=os.environ.get("MYSQL_HOST", "localhost"),
user=os.environ.get("MYSQL_USER"),
password=os.environ.get("MYSQL_PASSWORD")
)
print("Connected:", connection.is_connected())
connection.close()Setze die Variablen in deiner Shell, bevor du das Skript ausführst:
export MYSQL_USER=yourusername
export MYSQL_PASSWORD=yourpassword
python connect.pyEine Datenbank erstellen
Sobald du mit dem Server verbunden bist (ohne eine Datenbank anzugeben), kannst du mit einer CREATE DATABASE-Anweisung eine erstellen. Führe sie über einen Cursor aus — ein Objekt, das SQL-Befehle sendet und Ergebnisse abruft.
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = connection.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")
print("Database created")
cursor.close()
connection.close()Die Klausel IF NOT EXISTS verhindert einen Fehler, wenn die Datenbank bereits vorhanden ist.
Datenbanken auflisten
Du kannst überprüfen, ob die Datenbank erstellt wurde, indem du alle Datenbanken auf dem Server auflistest:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = connection.cursor()
cursor.execute("SHOW DATABASES")
for db in cursor:
print(db)
cursor.close()
connection.close()Jede Zeile wird als Tupel zurückgegeben, sodass du eine Ausgabe wie diese siehst:
('information_schema',)
('mydatabase',)
('mysql',)
('performance_schema',)
('sys',)Verbindung zu einer bestimmten Datenbank herstellen
Sobald die Datenbank existiert, füge beim Verbinden den Parameter database hinzu, damit alle nachfolgenden Abfragen gegen diese Datenbank ausgeführt werden:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
print("Database in use:", connection.database)
connection.close()Einen Kontextmanager verwenden (empfohlenes Muster)
Das manuelle Aufrufen von .close() bei jeder Verbindung und jedem Cursor ist fehleranfällig — wenn vor .close() eine Ausnahme auftritt, bleibt die Verbindung offen. Verwende einen try/finally-Block oder, noch besser, umschließe den Cursor mit einer with-Anweisung:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
try:
with connection.cursor() as cursor:
cursor.execute("SELECT DATABASE()")
row = cursor.fetchone()
print("Current database:", row[0])
finally:
connection.close()Der with-Block schließt den Cursor automatisch, wenn der Block endet, auch wenn eine Ausnahme ausgelöst wird.
Verbindungsfehler behandeln
Netzwerkprobleme oder falsche Anmeldedaten lösen mysql.connector.Error aus. Behandle diese Ausnahme immer im Produktionscode:
import mysql.connector
from mysql.connector import Error
try:
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
print("Connection successful")
except Error as e:
print(f"Error connecting to MySQL: {e}")
finally:
if "connection" in dir() and connection.is_connected():
connection.close()
print("Connection closed")Häufige Fehler, auf die du stoßen kannst:
| Fehlercode | Bedeutung |
|---|---|
| 1045 | Zugriff verweigert — falscher Benutzername oder falsches Passwort |
| 2003 | Verbindung zum Host nicht möglich — Server läuft nicht oder falscher Host/Port |
| 1049 | Unbekannte Datenbank — der angegebene database-Name existiert nicht |
Kurzreferenz: Verbindungsparameter
| Parameter | Typ | Beschreibung |
|---|---|---|
host | str | Hostname oder IP des MySQL-Servers (Standard "127.0.0.1") |
port | int | MySQL-Port (Standard 3306) |
user | str | MySQL-Benutzername |
password | str | MySQL-Passwort |
database | str | Beim Verbinden auszuwählende Datenbank |
charset | str | Zeichensatz (Standard "utf8mb4") |
connect_timeout | int | Sekunden bis zum Verbindungstimeout (Standard 10) |
use_pure | bool | True = reines Python; False = C-Erweiterung falls verfügbar |
Was als Nächstes kommt
Mit einer funktionierenden Verbindung kannst du darauf aufbauen:
- Eine Tabelle erstellen — Spalten und Datentypen mit
CREATE TABLEdefinieren. - Zeilen einfügen — Daten mit
INSERT INTOund parametrisierten Abfragen hinzufügen. - Daten abfragen — Zeilen mit
SELECT,fetchone()undfetchall()abrufen. - Zeilen filtern — Ergebnisse mit
WHERE-Klauseln einschränken. - Eine Datenbank erstellen — vollständige Erläuterung des
CREATE DATABASE-Befehls.