Guide technique pour l'utilisation de Python avec MySQL et SQLite

Introduction aux bases de données en Python

Python offre des bibliothèques pour interagir avec des bases de données relationnelles comme SQLite et MySQL. Ce guide explique les concepts fondamentaux et fournit des exemlpes pratiques.

Objets de connexino et curseurs

L'objet de connexion établit le lien avec la base de données, tandis que l'objet curseur exécute les requêtes SQL et récupère les résultats. Voici un exemple utilisant SQLite avec des noms de variables modifiés :

import sqlite3

# Établir une connexion vers une base SQLite
db_link = sqlite3.connect('donnees_app.db')

# Créer un curseur pour exécuter des commandes
query_handler = db_link.cursor()

# Exemple de création de table
query_handler.execute('''CREATE TABLE IF NOT EXISTS employes (
    identifiant INTEGER PRIMARY KEY,
    nom_complet TEXT,
    email_professionnel TEXT
)''')

# Valider les changements
db_link.commit()

# Libérer les ressources
query_handler.close()
db_link.close()

Création de fichiers de bases de données SQLite

Pour SQLite, l'appel à la fonction de connexion génère automatiquement un nouveau fichier si celui-ci n'existe pas. Voici une approche alternative avec gestion de chemin :

import sqlite3
import os

# Chemin vers le fichier de base
chemin_db = os.path.join('data', 'stocks.db')
os.makedirs(os.path.dirname(chemin_db), exist_ok=True)

# Initialisation de la connexion
connexion = sqlite3.connect(chemin_db)
connexion.close()

Opérations complètes sur SQLite

Les opérations CRUD (Create, Read, Update, Delete) peuvent être encapsulées dans des fonctions. Cet exemple utilise des structures différentes et des noms explicites :

import sqlite3

def gerer_produits():
    base = sqlite3.connect('inventaire.db')
    curseur = base.cursor()
    
    # Structure de table modifiée
    curseur.execute('''CREATE TABLE IF NOT EXISTS produits (
        code_produit TEXT PRIMARY KEY,
        designation TEXT,
        quantite_stock INTEGER DEFAULT 0
    )''')
    
    # Insertion paramétrique
    articles = [('P001', 'Clavier mécanique', 15), ('P002', 'Souris sans fil', 30)]
    curseur.executemany('INSERT OR IGNORE INTO produits VALUES (?, ?, ?)', articles)
    base.commit()
    
    # Lecture avec filtrage
    curseur.execute('SELECT designation, quantite_stock FROM produits WHERE quantite_stock > ?')
    for enregistrement in curseur:
        print(f'Produit: {enregistrement[0]}, Stock: {enregistrement[1]}')
    
    # Mise à jour ciblée
    curseur.execute('UPDATE produits SET quantite_stock = quantite_stock - 1 WHERE code_produit = ?', ('P001',))
    base.commit()
    
    # Suppression conditionnelle
    curseur.execute('DELETE FROM produits WHERE quantite_stock = ?', (0,))
    base.commit()
    
    curseur.close()
    base.close()

gerer_produits()

Configuration de l'environnement MySQL

Pour travailler avec MySQL, installez d'abord le serveur depuis le site officiel. Ensuite, ajoutez le pilote PyMySQL à votre projet avec la commande suivante :

pip install pymysql

Connxeion et opérations sur MySQL

L'utilisation de PyMySQL nécessite des paramètres de connexion spécifiques. Voici une implémentation réorganisée avec gestion des erreurs :

import pymysql
from pymysql import Error

def interagir_mysql():
    try:
        # Connexion avec des paramètres structurés
        parametres = {
            'host': '127.0.0.1',
            'user': 'admin_app',
            'password': 'secret123',
            'database': 'systeme_commandes',
            'charset': 'utf8mb4',
            'cursorclass': pymysql.cursors.DictCursor
        }
        lien = pymysql.connect(**parametres)
        
        with lien.cursor() as curseur:
            # Création d'une table avec noms en français
            curseur.execute('''CREATE TABLE IF NOT EXISTS clients (
                id_client INT AUTO_INCREMENT PRIMARY KEY,
                raison_sociale VARCHAR(200),
                adresse_courriel VARCHAR(100)
            )''')
            
            # Insertion multiple
            donnees_clients = [
                ('Entreprise Alpha', 'contact@alpha.com'),
                ('Société Beta', 'info@beta.fr')
            ]
            curseur.executemany('INSERT INTO clients (raison_sociale, adresse_courriel) VALUES (%s, %s)', donnees_clients)
            lien.commit()
            
            # Requête de lecture
            curseur.execute('SELECT * FROM clients')
            for client in curseur:
                print(f"ID: {client['id_client']}, Société: {client['raison_sociale']}")
            
            # Modification de données
            curseur.execute('UPDATE clients SET adresse_courriel = %s WHERE raison_sociale = %s', ('nouveau@beta.fr', 'Société Beta'))
            lien.commit()
            
    except Error as e:
        print(f"Erreur lors de l'opération : {e}")
    finally:
        if lien and lien.open:
            lien.close()

interagir_mysql()

Étiquettes: Python MySQL sqlite PyMySQL bases de données relationnelles

Publié le 10 juin à 19h23