Connexion à la base de données : Établissement d'une communication entre le programme et le SGBD pour exécuter des requêtes SQL.
- Importer la bibliothèque appropriée (sqlite3, psycopg2, etc.)
- Créer un objet de connexion avec les paramètres requis
- Créer un curseur pour exécuter les requêtes
- Utiliser try/except pour gérer les erreurs
On importe le module sqlite3 pour interagir avec la base SQLite
On utilise sqlite3.connect('ma_base.db') pour créer ou ouvrir la base
On crée un curseur avec conn.cursor() pour exécuter les requêtes
On ferme la connexion avec conn.close() pour libérer les ressources
Connexion établie avec succès à la base SQLite
• Connexion unique : Une seule connexion active par session est recommandée
• Fermeture obligatoire : Toujours fermer la connexion pour libérer les ressources
• Gestion des erreurs : Utiliser try/except pour capturer les exceptions
Paramètres dans les requêtes : Utilisation de placeholders (?) pour éviter les injections SQL et sécuriser les requêtes dynamiques.
On utilise un placeholder ? à la place de la valeur directe
On crée un tuple (18,) avec la valeur du paramètre
On utilise cursor.execute(requete, parametre) pour exécuter
On utilise cursor.fetchall() pour obtenir tous les résultats
Requête exécutée en toute sécurité avec paramètres
• Sécurité : Utiliser toujours des placeholders pour éviter les injections SQL
• Type tuple : Les paramètres doivent être fournis sous forme de tuple
• Placeholders : Utiliser ? pour SQLite, %s pour PostgreSQL/MySQL
Insertion sécurisée : Méthode d'insertion de données en utilisant des paramètres pour éviter les failles de sécurité.
On crée un tuple donnees avec les valeurs à insérer
On utilise des placeholders ? pour chaque champ
On exécute la requête avec cursor.execute()
On utilise conn.commit() pour valider les modifications
Données insérées en toute sécurité dans la base
• Sécurité : Toujours utiliser des paramètres pour les insertions
• Commit obligatoire : Utiliser commit() pour valider les modifications
• Nombre de lignes : cursor.rowcount permet de vérifier le nombre de lignes affectées
Transaction : Ensemble d'opérations SQL qui doivent être exécutées ensemble ou annulées ensemble pour maintenir l'intégrité des données.
On utilise conn.execute("BEGIN") pour démarrer la transaction
On exécute plusieurs requêtes dans le bloc try
En cas de succès, commit() valide toutes les opérations
En cas d'erreur, rollback() annule toutes les opérations
Transaction gérée avec succès et sécurité
• ACID : Atomicité, Cohérence, Isolation, Durabilité
• Try/Except/Finally : Structure pour gérer les erreurs
• Rollback : Annule toutes les opérations si une erreur survient
Exécution en lot : Technique pour exécuter plusieurs requêtes similaires de manière efficace en utilisant executemany().
On crée une liste de tuples donnees avec les valeurs à mettre à jour
On utilise des placeholders ? pour les valeurs variables
On utilise cursor.executemany() pour exécuter plusieurs fois la même requête
On utilise try/except pour gérer les erreurs et rollback en cas de problème
Plusieurs mises à jour exécutées efficacement
• Efficacité : executemany() est plus rapide que des exécutions individuelles
• Transaction unique : Toutes les opérations sont dans la même transaction
• Gestion des erreurs : Rollback en cas d'échec d'une opération
- Utilisation de context managers : with statement pour gérer automatiquement les connexions
- Validation des entrées : Vérifier les données avant insertion
- Journalisation : Enregistrer les opérations pour le débogage
- Sécurité : Utiliser des requêtes préparées avec paramètres
- Ne jamais concaténer directement des chaînes dans les requêtes SQL
- Toujours utiliser des paramètres nommés ou positionnels
- Valider et nettoyer les données avant insertion dans la base
- Utiliser des transactions pour les opérations critiques