Python mit MySQL verbinden für Einsteiger

In diesem Tutorial zeigen wir Ihnen, wie Sie mit Python eine Verbindung zu einer lokalen MySQL-Datenbank herstellen können. Wir behandeln nicht nur die grundlegende Implementierung, sondern auch häufige Probleme und deren Lösungen.

Voraussetzungen

Bevor wir beginnen, stellen Sie sicher, dass folgende Elemente vorhanden sind:

  • Python 3.x installiert
  • MySQL Server läuft lokal (localhost)
  • Grundlegende Kenntnisse in Python

1. Installation des MySQL Connectors

Zunächst benötigen wir das MySQL Connector für Python:

pip install mysql-connector-python

2. Grundlegende Verbindung herstellen

Hier ist ein einfaches Skript, um eine Verbindung zur lokalen MySQL-Datenbank herzustellen:

import mysql.connector
from mysql.connector import Error

def create_connection():
    try:
        connection = mysql.connector.connect(
            host='localhost',
            port=3306,
            user='root',
            password='',
            database='test'
        )

        if connection.is_connected():
            print("Erfolgreich mit MySQL-Datenbank verbunden")
            return connection

    except Error as e:
        print(f"Fehler bei der Verbindung: {e}")
        return None

# Verbindung herstellen
conn = create_connection()
if conn:
    conn.close()

3. Vollständiges Beispiel mit Fehlerbehandlung

import mysql.connector
from mysql.connector import Error

def create_connection():
    """Stellt eine Verbindung zur lokalen MySQL-Datenbank her"""
    try:
        connection = mysql.connector.connect(
            host='localhost',
            port=3306,
            user='root',               # Anpassen!
            password='',               # Anpassen!
            database='test'            # Anpassen!
        )

        if connection.is_connected():
            print("Erfolgreich mit MySQL-Datenbank verbunden")
            print(f"Server-Version: {connection.get_server_info()}")

            return connection

    except Error as e:
        print(f"Fehler bei der Verbindung zur MySQL-Datenbank: {e}")
        return None

def close_connection(connection):
    """Schließt die Datenbankverbindung"""
    if connection and connection.is_connected():
        connection.close()
        print("MySQL-Verbindung geschlossen")

# Hauptprogramm
if __name__ == "__main__":
    conn = create_connection()

    if conn:
        # Hier können Sie Ihre Datenbankoperationen durchführen
        print("Verbindung erfolgreich hergestellt!")
        close_connection(conn)
    else:
        print("Keine Verbindung zur Datenbank hergestellt")

4. Häufige Probleme und Lösungen

Problem 1: „Access denied for user“

Fehlermeldung: mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Lösung:

  • Überprüfen Sie Benutzername und Passwort
  • Stellen Sie sicher, dass der Benutzer die richtigen Rechte hat
  • Verwenden Sie das korrekte Passwort
# Korrekte Konfiguration
connection = mysql.connector.connect(
    host='localhost',
    user='root',           # Benutzername
    password='mein_passwort',  # Passwort setzen!
    database='test'
)

Problem 2: „Can’t connect to MySQL server on ‚localhost'“

Fehlermeldung: mysql.connector.errors.InterfaceError: 2003 (HY000): Can't connect to MySQL server on 'localhost'

Lösung:

  • Stellen Sie sicher, dass MySQL Server läuft
  • Überprüfen Sie den Port (Standard: 3306)
  • Prüfen Sie die Firewall-Einstellungen
# Auf Linux/Mac
sudo service mysql start
# oder
brew services start mysql

# Auf Windows
net start mysql

Problem 3: „Unknown database ‚test'“

Fehlermeldung: mysql.connector.errors.DatabaseError: 1049 (42000): Unknown database 'test'

Lösung:

  • Erstellen Sie die Datenbank oder verwenden Sie eine existierende
  • Verwenden Sie einen anderen Datenbanknamen
-- In MySQL Shell erstellen
CREATE DATABASE test;

Problem 4: „No module named mysql.connector“

Fehlermeldung: ModuleNotFoundError: No module named 'mysql.connector'

Lösung:

  • Installieren Sie das Paket korrekt:
pip install mysql-connector-python
# oder für ältere Versionen
pip install MySQL-python

5. Fortgeschrittene Konfiguration

Für produktive Anwendungen empfehlen wir eine Konfigurationsdatei:

import mysql.connector
from mysql.connector import Error
import json

def load_db_config():
    """Lädt Datenbankkonfiguration aus JSON-Datei"""
    try:
        with open('db_config.json', 'r') as file:
            config = json.load(file)
        return config
    except FileNotFoundError:
        # Fallback-Konfiguration
        return {
            "host": "localhost",
            "port": 3306,
            "user": "root",
            "password": "",
            "database": "test"
        }

def create_connection():
    """Stellt Verbindung her mit Konfiguration aus Datei"""
    try:
        config = load_db_config()
        connection = mysql.connector.connect(**config)

        if connection.is_connected():
            print("Verbindung zur Datenbank erfolgreich hergestellt")
            return connection

    except Error as e:
        print(f"Fehler bei der Verbindung: {e}")
        return None

6. db_config.json Beispiel

{
    "host": "localhost",
    "port": 3306,
    "user": "your_username",
    "password": "your_password",
    "database": "your_database",
    "charset": "utf8mb4",
    "collation": "utf8mb4_unicode_ci"
}

7. Best Practices

Verwendung von Kontextmanagern

from contextlib import contextmanager

@contextmanager
def get_db_connection():
    connection = None
    try:
        connection = mysql.connector.connect(
            host='localhost',
            user='root',
            password='',
            database='test'
        )
        yield connection
    except Error as e:
        if connection:
            connection.rollback()
        raise e
    finally:
        if connection and connection.is_connected():
            connection.close()

# Nutzung
with get_db_connection() as conn:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM your_table")
    results = cursor.fetchall()

Verbindungspooling für Produktionsumgebungen

from mysql.connector import pooling

# Pool erstellen
config = {
    'user': 'root',
    'password': '',
    'host': 'localhost',
    'database': 'test',
    'pool_name': 'mypool',
    'pool_size': 5,
    'pool_reset_session': True
}

pool = pooling.MySQLConnectionPool(**config)

# Verbindung aus Pool holen
connection = pool.get_connection()

8. Nächste Schritte

Nachdem Sie erfolgreich eine Verbindung hergestellt haben, können Sie:

  • Daten abfragen (SELECT)
  • Daten einfügen (INSERT)
  • Daten aktualisieren (UPDATE)
  • Daten löschen (DELETE)
# Beispiel für eine Abfrage
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE age > %s", (18,))
results = cursor.fetchall()
for row in results:
    print(row)

Fazit

Die Verbindung zu einer MySQL-Datenbank mit Python ist ein grundlegender Schritt für viele Anwendungen. Mit dem MySQL Connector für Python können Sie problemlos Datenbankoperationen durchführen. Achten Sie auf die richtige Konfiguration und Fehlerbehandlung, um eine stabile Verbindung zu gewährleisten.

Wenn Sie Probleme mit der Verbindung haben, überprüfen Sie immer:

  1. Ob MySQL Server läuft
  2. Ob die Zugangsdaten korrekt sind
  3. Ob die Datenbank existiert
  4. Ob die Firewall die Verbindung nicht blockiert

Mit diesen Grundlagen können Sie jetzt Ihre Python-Anwendungen mit MySQL-Datenbanken verbinden und komplexe Datenbankoperationen durchführen.