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