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-pythonDieses 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,tableoderselectals 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
sysUm 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
- MySQL Create Table — definiere Tabellen in der soeben erstellten Datenbank.
- MySQL Insert — füge Zeilen in deine Tabellen ein.
- MySQL Select — frage Daten mit
SELECTab.