W3docs

Créer une table MySQL avec Python

Apprenez à créer des tables MySQL en Python avec mysql-connector-python. Couvre CREATE TABLE, les types de données, les contraintes et IF NOT EXISTS.

Créer une table est la première étape pour stocker des données structurées dans MySQL. Ce chapitre montre comment définir et créer une table MySQL depuis Python avec mysql-connector-python, en couvrant les types de données des colonnes, les contraintes courantes, le garde IF NOT EXISTS, comment lister les tables existantes et comment gérer les erreurs proprement.

Prérequis

Avant d'exécuter l'un des exemples ci-dessous, assurez-vous d'avoir :

  • Python 3.x installé
  • Un serveur MySQL en cours d'exécution
  • mysql-connector-python installé :
pip install mysql-connector-python

Connexion à MySQL

Chaque opération commence par une connexion. Passez vos identifiants et le nom de la base de données cible à mysql.connector.connect() :

import mysql.connector

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

mycursor = mydb.cursor()

L'objet cursor() est ce que vous utilisez pour envoyer des instructions SQL au serveur.

Créer une table

Utilisez l'instruction SQL CREATE TABLE à l'intérieur de cursor.execute() pour définir une nouvelle table. L'exemple ci-dessous crée une table customers avec quatre colonnes :

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()

Types de colonnes et contraintes utilisés ci-dessus

ColonneTypeRemarques
idINTAUTO_INCREMENT génère un ID unique pour chaque ligne ; PRIMARY KEY impose l'unicité et accélère les recherches
nameVARCHAR(255)Chaîne de longueur variable jusqu'à 255 caractères ; NOT NULL signifie que chaque ligne doit fournir une valeur
addressVARCHAR(255)Optionnel — sans NOT NULL, il accepte NULL
ageINTStocke des nombres entiers

Utiliser IF NOT EXISTS

Exécuter CREATE TABLE sur une table qui existe déjà déclenche une erreur. Ajoutez IF NOT EXISTS pour que l'instruction n'ait aucun effet lorsque la table est déjà présente :

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()

Ce modèle peut être appelé à chaque démarrage de l'application sans provoquer d'erreurs de table dupliquée.

Lister les tables pour vérifier la création

Après avoir créé une table, vous pouvez confirmer son existence en exécutant SHOW TABLES :

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()

Exemple de sortie :

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

Gestion des erreurs

Envelopper votre code de création de table dans un bloc try/except vous permet d'intercepter les problèmes — comme une connexion perdue ou une erreur de syntaxe dans votre SQL — sans faire planter le programme :

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.")

Le bloc finally garantit que la connexion est toujours fermée, même si une exception se produit.

Types de données de colonnes courants

MySQL prend en charge de nombreux types de données. Voici ceux que vous utiliserez le plus souvent dans les applications Python :

Type de donnéesCas d'utilisation
INTNombres entiers (IDs, compteurs, âges)
FLOAT, DOUBLENombres décimaux (prix, mesures)
VARCHAR(n)Texte de longueur variable jusqu'à n caractères
TEXTLongues chaînes sans longueur maximale fixe
DATEDates calendaires (YYYY-MM-DD)
DATETIMEDate et heure combinées (YYYY-MM-DD HH:MM:SS)
BOOLEANTRUE / FALSE (stocké en tant que TINYINT(1))

Un exemple plus complet

Voici une table plus réaliste qui utilise plusieurs types de données et contraintes ensemble :

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 signifie que quantity est défini à 1 lorsqu'aucune valeur n'est fournie. DEFAULT CURRENT_TIMESTAMP enregistre automatiquement le moment où chaque ligne de commande est insérée.

Conclusion

Pour créer une table MySQL depuis Python :

  1. Installez mysql-connector-python et connectez-vous à votre base de données.
  2. Écrivez une instruction CREATE TABLE qui définit le nom, le type de données et les éventuelles contraintes de chaque colonne.
  3. Utilisez IF NOT EXISTS pour éviter les erreurs lors d'exécutions répétées.
  4. Appelez SHOW TABLES (ou interrogez information_schema.tables) pour confirmer que la table a été créée.
  5. Fermez toujours le curseur et la connexion — idéalement dans un bloc finally.

Une fois votre table créée, vous pouvez commencer à insérer des lignes (voir MySQL Insert) et les interroger (voir MySQL Select).

Was this page helpful?