W3docs

MySQL Créer une base de données

Apprenez à créer une base de données MySQL en Python avec mysql-connector-python : connexion, création, listage et sélection de bases de données.

Ce chapitre explique comment créer une base de données MySQL depuis Python à l'aide de la bibliothèque mysql-connector-python. Vous apprendrez à vous connecter à un serveur MySQL, à exécuter l'instruction CREATE DATABASE, à lister les bases de données disponibles et à en sélectionner une pour les requêtes suivantes.

Si vous n'avez pas encore installé le connecteur, consultez d'abord MySQL — Premiers pas. Une fois votre base de données créée, l'étape suivante consiste à créer des tables.

Installer le connecteur MySQL

Installez le pilote MySQL officiel pour Python avec pip :

pip install mysql-connector-python

Ce package fonctionne avec Python 3.6 et les versions ultérieures et ne nécessite pas d'extension C séparée.

Se connecter au serveur MySQL

Avant de créer une base de données, vous devez ouvrir une connexion au serveur MySQL. Fournissez l'adresse de l'hôte, un compte utilisateur et le mot de passe de ce compte. Notez que vous ne spécifiez pas de database à ce stade — la base de données n'existe pas encore.

import mysql.connector

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

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

Si les informations de connexion sont incorrectes, mysql.connector.connect() lève une exception mysql.connector.errors.InterfaceError. Encapsulez l'appel dans un bloc try/except dans le code de production.

Créer une base de données

Une fois connecté, obtenez un curseur et exécutez l'instruction SQL CREATE DATABASE. Le curseur est l'objet par lequel toutes les commandes SQL sont envoyées.

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

Si mydatabase existe déjà, le serveur génère une erreur. Ajoutez IF NOT EXISTS pour rendre l'instruction idempotente — elle réussit que la base de données soit nouvelle ou déjà présente :

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

Règles de nommage des bases de données

  • Les noms peuvent contenir des lettres, des chiffres et des underscores (_).
  • Les noms sont insensibles à la casse sous Windows et sensibles à la casse sur la plupart des systèmes Linux.
  • La longueur maximale est de 64 caractères.
  • Évitez les mots réservés tels que database, table ou select comme noms de base de données ; si vous devez les utiliser, entourez le nom de backticks dans SQL.

Définir un jeu de caractères

Par défaut, MySQL utilise le jeu de caractères par défaut du serveur (généralement utf8mb4 sur les installations modernes). Vous pouvez spécifier explicitement le jeu de caractères et la collation pour garantir un comportement cohérent entre différents serveurs :

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

utf8mb4 stocke l'intégralité de la plage Unicode (y compris les emoji). utf8mb4_unicode_ci est une collation insensible à la casse et aux accents, adaptée à la plupart des applications web.

Lister les bases de données existantes

Après avoir créé la base de données, vous pouvez vérifier son existence en exécutant SHOW DATABASES, qui retourne une ligne par base de données :

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

Chaque ligne renvoyée par SHOW DATABASES est un tuple à un élément, de sorte que le déballage (db_name,) extrait directement la chaîne. Un résultat typique ressemble à ceci :

information_schema
mydatabase
mysql
performance_schema
sys

Pour vérifier uniquement si votre base de données spécifique existe, vous pouvez filtrer en Python :

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

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

Sélectionner une base de données

Une fois qu'une base de données existe, transmettez son nom en tant qu'argument database lors de l'ouverture de la connexion — c'est le schéma habituel pour tout le travail ultérieur :

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

Vous pouvez également changer la base de données active sur une connexion existante sans la fermer :

mycursor.execute("USE mydatabase")

Cela est pratique lorsque vous devez passer d'une base de données à une autre dans le même script, mais passer database= à connect() est plus explicite pour la plupart des cas d'usage.

Gérer les erreurs

Gérez toujours les erreurs potentielles de base de données afin que votre application échoue de manière contrôlée plutôt que de planter avec une exception non gérée :

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

Le bloc finally garantit que la connexion est fermée même lorsqu'une exception est levée, évitant ainsi les fuites de connexion.

Exemple complet fonctionnel

L'extrait ci-dessous combine toutes les étapes : créer la base de données, vérifier qu'elle apparaît dans SHOW DATABASES, puis se reconnecter avec la base de données sélectionnée :

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

Résultat attendu lors de l'exécution sur un serveur MySQL vierge :

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

Étapes suivantes

Was this page helpful?