W3docs

MySQL-Datenbank erstellen

Lerne, wie du mit mysql-connector-python eine MySQL-Datenbank in Python erstellst, verbindest, auflistest und auswählst.

Dieses Kapitel erklärt, wie du mit der Bibliothek mysql-connector-python eine MySQL-Datenbank aus Python heraus erstellst. Du lernst, wie du dich mit einem MySQL-Server verbindest, die Anweisung CREATE DATABASE ausführst, verfügbare Datenbanken auflistest und eine Datenbank für nachfolgende Abfragen auswählst.

Falls du den Connector noch nicht installiert hast, lies zuerst MySQL – Erste Schritte. Sobald deine Datenbank vorhanden ist, besteht der nächste Schritt im Erstellen von Tabellen.

Den MySQL-Connector installieren

Installiere den offiziellen MySQL-Treiber für Python mit pip:

pip install mysql-connector-python

Dieses Paket funktioniert mit Python 3.6 und neuer und benötigt keine separate C-Erweiterung.

Verbindung zum MySQL-Server herstellen

Bevor du eine Datenbank erstellst, musst du eine Verbindung zum MySQL-Server öffnen. Gib die Hostadresse, ein Benutzerkonto und das zugehörige Passwort an. Beachte, dass du an dieser Stelle keine database angibst — die Datenbank existiert noch nicht.

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword"
)

print(mydb)   # <mysql.connector.connection.MySQLConnection object at 0x...>
mydb.close()

Wenn die Verbindungsdetails falsch sind, wirft mysql.connector.connect() den Fehler mysql.connector.errors.InterfaceError. Umschließe den Aufruf im Produktionscode mit einem try/except-Block.

Eine Datenbank erstellen

Sobald die Verbindung steht, hole dir einen Cursor und führe die SQL-Anweisung CREATE DATABASE aus. Der Cursor ist das Objekt, über das alle SQL-Befehle gesendet werden.

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword"
)

mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")

mycursor.close()
mydb.close()

Falls mydatabase bereits existiert, gibt der Server einen Fehler aus. Füge IF NOT EXISTS hinzu, um die Anweisung idempotent zu machen — sie gelingt unabhängig davon, ob die Datenbank neu ist oder bereits vorhanden:

mycursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")

Benennungsregeln für Datenbanken

  • Namen dürfen Buchstaben, Ziffern und Unterstriche (_) enthalten.
  • Namen sind unter Windows nicht case-sensitiv, auf den meisten Linux-Systemen hingegen schon.
  • Die maximale Länge beträgt 64 Zeichen.
  • Vermeide reservierte Wörter wie database, table oder select als Datenbanknamen; falls du sie verwenden musst, setze den Namen in SQL in Backticks.

Zeichensatz festlegen

Standardmäßig verwendet MySQL den Standard-Zeichensatz des Servers (bei modernen Installationen in der Regel utf8mb4). Du kannst Zeichensatz und Sortierung explizit angeben, um ein konsistentes Verhalten auf verschiedenen Servern zu gewährleisten:

mycursor.execute(
    "CREATE DATABASE IF NOT EXISTS mydatabase "
    "CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
)

utf8mb4 speichert den vollständigen Unicode-Bereich (einschließlich Emoji). utf8mb4_unicode_ci ist eine nicht zwischen Groß-/Kleinschreibung unterscheidende, akzentunempfindliche Sortierung, die für die meisten Webanwendungen geeignet ist.

Vorhandene Datenbanken auflisten

Nach dem Erstellen der Datenbank kannst du prüfen, ob sie vorhanden ist, indem du SHOW DATABASES ausführst. Dieser Befehl gibt eine Zeile pro Datenbank zurück:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword"
)

mycursor = mydb.cursor()
mycursor.execute("SHOW DATABASES")

for (db_name,) in mycursor:
    print(db_name)

mycursor.close()
mydb.close()

Jede von SHOW DATABASES zurückgegebene Zeile ist ein Tupel mit einem Element, daher extrahiert das Entpacken (db_name,) den string direkt. Eine typische Ausgabe sieht so aus:

information_schema
mydatabase
mysql
performance_schema
sys

Um nur zu prüfen, ob deine spezifische Datenbank existiert, kannst du in Python filtern:

mycursor.execute("SHOW DATABASES")
databases = [row[0] for row in mycursor]

if "mydatabase" in databases:
    print("Database found.")
else:
    print("Database not found.")

Eine Datenbank auswählen

Sobald eine Datenbank existiert, übergib ihren Namen als Argument database, wenn du die Verbindung öffnest — dies ist das übliche Muster für alle weiteren Arbeiten:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword",
    database="mydatabase"   # select the database here
)

mycursor = mydb.cursor()
# All queries now run against mydatabase
mycursor.close()
mydb.close()

Du kannst auch die aktive Datenbank einer bestehenden Verbindung wechseln, ohne sie zu schließen:

mycursor.execute("USE mydatabase")

Dies ist praktisch, wenn du in demselben Skript zwischen mehreren Datenbanken wechseln musst. Das Übergeben von database= an connect() ist jedoch für die meisten Anwendungsfälle übersichtlicher.

Fehler behandeln

Behandle stets potenzielle Datenbankfehler, damit deine Anwendung kontrolliert fehlschlägt, anstatt mit einer unbehandelten Ausnahme abzustürzen:

import mysql.connector
from mysql.connector import Error

mydb = None
try:
    mydb = mysql.connector.connect(
        host="localhost",
        user="yourusername",
        password="yourpassword"
    )
    mycursor = mydb.cursor()
    mycursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")
    print("Database created (or already exists).")
except Error as e:
    print(f"Error: {e}")
finally:
    if mydb is not None and mydb.is_connected():
        mycursor.close()
        mydb.close()

Der finally-Block stellt sicher, dass die Verbindung auch dann geschlossen wird, wenn eine Ausnahme ausgelöst wird, und verhindert so Verbindungslecks.

Vollständiges Arbeitsbeispiel

Der folgende Code-Abschnitt kombiniert alle Schritte: Datenbank erstellen, prüfen, ob sie in SHOW DATABASES erscheint, und dann mit ausgewählter Datenbank neu verbinden:

import mysql.connector
from mysql.connector import Error

DB_NAME = "mydatabase"

def create_database():
    try:
        conn = mysql.connector.connect(
            host="localhost",
            user="yourusername",
            password="yourpassword"
        )
        cursor = conn.cursor()

        # Create the database if it does not exist
        cursor.execute(
            f"CREATE DATABASE IF NOT EXISTS {DB_NAME} "
            "CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
        )
        print(f"Database '{DB_NAME}' created (or already exists).")

        # Confirm it appears in the database list
        cursor.execute("SHOW DATABASES")
        databases = [row[0] for row in cursor]
        if DB_NAME in databases:
            print(f"Confirmed: '{DB_NAME}' is listed on the server.")

        cursor.close()
        conn.close()

        # Re-connect with the database selected
        conn = mysql.connector.connect(
            host="localhost",
            user="yourusername",
            password="yourpassword",
            database=DB_NAME
        )
        print(f"Connected to '{DB_NAME}' successfully.")
        conn.close()

    except Error as e:
        print(f"Error: {e}")

create_database()

Erwartete Ausgabe bei Ausführung gegen einen frischen MySQL-Server:

Database 'mydatabase' created (or already exists).
Confirmed: 'mydatabase' is listed on the server.
Connected to 'mydatabase' successfully.

Nächste Schritte

Was this page helpful?