W3docs

Tabelle in MySQL mit Python erstellen

Lerne, wie du MySQL-Tabellen in Python mit mysql-connector-python erstellst. Behandelt CREATE TABLE, Datentypen, Constraints und SHOW TABLES.

Das Erstellen einer Tabelle ist der erste Schritt zum Speichern strukturierter Daten in MySQL. Dieses Kapitel zeigt, wie du eine MySQL-Tabelle aus Python heraus mit mysql-connector-python definierst und erstellst. Es werden Spalten-Datentypen, häufige Constraints, der IF NOT EXISTS-Schutz, das Auflisten vorhandener Tabellen und eine saubere Fehlerbehandlung behandelt.

Voraussetzungen

Bevor du eines der folgenden Beispiele ausführst, stelle sicher, dass du Folgendes hast:

  • Python 3.x installiert
  • Einen laufenden MySQL-Server
  • mysql-connector-python installiert:
pip install mysql-connector-python

Verbindung zu MySQL herstellen

Jede Operation beginnt mit einer Verbindung. Übergib deine Anmeldedaten und den Zieldatenbanknamen an mysql.connector.connect():

import mysql.connector

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

mycursor = mydb.cursor()

Das cursor()-Objekt wird verwendet, um SQL-Anweisungen an den Server zu senden.

Eine Tabelle erstellen

Verwende die SQL-Anweisung CREATE TABLE innerhalb von cursor.execute(), um eine neue Tabelle zu definieren. Das folgende Beispiel erstellt eine customers-Tabelle mit vier Spalten:

import mysql.connector

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

mycursor = mydb.cursor()

sql = """
CREATE TABLE customers (
  id      INT AUTO_INCREMENT PRIMARY KEY,
  name    VARCHAR(255) NOT NULL,
  address VARCHAR(255),
  age     INT
)
"""

mycursor.execute(sql)
print("Table created successfully.")

mycursor.close()
mydb.close()

Verwendete Spaltentypen und Constraints

SpalteTypHinweise
idINTAUTO_INCREMENT generiert eine eindeutige ID für jede Zeile; PRIMARY KEY erzwingt Eindeutigkeit und beschleunigt Abfragen
nameVARCHAR(255)Zeichenkette variabler Länge bis zu 255 Zeichen; NOT NULL bedeutet, dass jede Zeile einen Wert liefern muss
addressVARCHAR(255)Optional — kein NOT NULL, akzeptiert daher NULL
ageINTSpeichert ganze Zahlen

IF NOT EXISTS verwenden

Das Ausführen von CREATE TABLE auf einer bereits vorhandenen Tabelle löst einen Fehler aus. Füge IF NOT EXISTS hinzu, damit die Anweisung keine Wirkung hat, wenn die Tabelle bereits vorhanden ist:

import mysql.connector

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

mycursor = mydb.cursor()

sql = """
CREATE TABLE IF NOT EXISTS customers (
  id      INT AUTO_INCREMENT PRIMARY KEY,
  name    VARCHAR(255) NOT NULL,
  address VARCHAR(255),
  age     INT
)
"""

mycursor.execute(sql)
print("Done — table created or already exists.")

mycursor.close()
mydb.close()

Dieses Muster kann bei jedem Anwendungsstart sicher aufgerufen werden, ohne Fehler durch doppelte Tabellen zu verursachen.

Tabellen zur Überprüfung der Erstellung auflisten

Nach dem Erstellen einer Tabelle kannst du mit SHOW TABLES bestätigen, dass sie vorhanden ist:

import mysql.connector

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

mycursor = mydb.cursor()

mycursor.execute("SHOW TABLES")

tables = [row[0] for row in mycursor.fetchall()]
print("Tables in database:", tables)

if "customers" in tables:
  print("customers table is ready.")
else:
  print("customers table was not found.")

mycursor.close()
mydb.close()

Beispielausgabe:

Tables in database: ['customers']
customers table is ready.

Fehlerbehandlung

Wenn du den Code zur Tabellenerstellung in einen try/except-Block einwickelst, kannst du Probleme abfangen — wie eine unterbrochene Verbindung oder einen Syntaxfehler in deinem SQL — ohne dass das Programm abstürzt:

import mysql.connector
from mysql.connector import Error

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

  mycursor = mydb.cursor()

  sql = """
  CREATE TABLE IF NOT EXISTS customers (
    id      INT AUTO_INCREMENT PRIMARY KEY,
    name    VARCHAR(255) NOT NULL,
    address VARCHAR(255),
    age     INT
  )
  """

  mycursor.execute(sql)
  print("Table created successfully.")

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

finally:
  if mydb.is_connected():
    mycursor.close()
    mydb.close()
    print("Connection closed.")

Der finally-Block stellt sicher, dass die Verbindung immer geschlossen wird, auch wenn eine Ausnahme auftritt.

Häufige Spalten-Datentypen

MySQL unterstützt viele Datentypen. Dies sind die, die du in Python-Anwendungen am häufigsten verwenden wirst:

DatentypAnwendungsfall
INTGanze Zahlen (IDs, Zählungen, Alter)
FLOAT, DOUBLEDezimalzahlen (Preise, Messwerte)
VARCHAR(n)Text variabler Länge bis zu n Zeichen
TEXTLange Zeichenketten ohne feste Maximallänge
DATEKalenderdaten (YYYY-MM-DD)
DATETIMEDatum und Uhrzeit kombiniert (YYYY-MM-DD HH:MM:SS)
BOOLEANTRUE / FALSE (gespeichert als TINYINT(1))

Ein vollständigeres Beispiel

Hier ist eine realistischere Tabelle, die mehrere Datentypen und Constraints kombiniert:

import mysql.connector
from mysql.connector import Error

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

  mycursor = mydb.cursor()

  sql = """
  CREATE TABLE IF NOT EXISTS orders (
    id           INT AUTO_INCREMENT PRIMARY KEY,
    customer_id  INT NOT NULL,
    product      VARCHAR(255) NOT NULL,
    quantity     INT NOT NULL DEFAULT 1,
    price        FLOAT NOT NULL,
    order_date   DATETIME DEFAULT CURRENT_TIMESTAMP
  )
  """

  mycursor.execute(sql)
  print("orders table created (or already exists).")

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

finally:
  if mydb.is_connected():
    mycursor.close()
    mydb.close()

DEFAULT 1 bedeutet, dass quantity auf 1 gesetzt wird, wenn kein Wert angegeben wird. DEFAULT CURRENT_TIMESTAMP zeichnet automatisch auf, wann jede Bestellzeile eingefügt wurde.

Fazit

So erstellst du eine Tabelle in MySQL aus Python heraus:

  1. Installiere mysql-connector-python und stelle eine Verbindung zu deiner Datenbank her.
  2. Schreibe eine CREATE TABLE-Anweisung, die den Namen, den Datentyp und etwaige Constraints jeder Spalte definiert.
  3. Verwende IF NOT EXISTS, um Fehler bei wiederholten Ausführungen zu vermeiden.
  4. Rufe SHOW TABLES auf (oder frage information_schema.tables ab), um zu bestätigen, dass die Tabelle erstellt wurde.
  5. Schließe immer den Cursor und die Verbindung — idealerweise in einem finally-Block.

Sobald deine Tabelle existiert, kannst du damit beginnen, Zeilen einzufügen (siehe MySQL Insert) und sie wieder abzufragen (siehe MySQL Select).

Was this page helpful?