Une fois la requête DELETE exécutée, il faut vérifier si la suppression a vraiment eu lieu.
Deux principaux facteurs peuvent empêcher une suppression de fonctionner :
Pour réagir en cas d'erreur dans la requête SQL, on placera la requête DELETE dans un try...except, comme pour toute opération effectuée sur une base de données.
Pour réagir à la situation où aucun enregistrements ne correpond à la clause WHERE, on vérifiera le nombre d'enregistrements affectés par la requête. Ceci sera réalisé à l'aide de curseur.rowrcount.
Ex :
requete = 'DELETE FROM cours WHERE code = ?'
curseur.execute(requete, (code,))
connexion.commit()
if curseur.rowcount > 0:
print('Le cours a été supprimé avec succès !')
else:
print('Il n\'y a pas de cours qui correspond à ce code.')
Dans l'ensemble, le programme console pour supprimer un cours à partir de son code ressemblera à ceci :
#!/usr/bin/env python
import sqlite3
import sys
import traceback
import atexit
def exit_handler():
"""Déconnecte la base de données si la connexion avait réussi."""
global connexion
print('On sort du programme!')
if connexion:
print('Fermeture de la connexion')
connexion.close()
else:
print('La connexion n\'a pas été faite, aucune fermeture nécessaire')
input('Appuyez sur une touche pour terminer.')
########## programme principal ##########
connexion = None
atexit.register(exit_handler)
# connexion et affichage des données
try:
connexion = sqlite3.connect('file:systemescolaire.db?mode=rw', uri=True)
curseur = connexion.cursor()
requete = 'SELECT code, description FROM cours ORDER BY code'
curseur.execute(requete)
resultat = curseur.fetchall()
print('Code Titre')
for enreg in resultat:
print(enreg[0] + ' ' + enreg[1])
except sqlite3.OperationalError as e:
if not connexion:
print('La connexion à la base de données a échoué.')
else:
print('Il y a une erreur dans la requête SQL.')
traceback.print_exc(file=sys.stdout)
except Exception as e:
print('Une erreur inattendue est survenue.')
traceback.print_exc(file=sys.stdout)
code = input('Veuillez entrer le code du cours à supprimer : ')
# suppression
try:
requete = 'DELETE FROM cours WHERE code = ?'
curseur.execute(requete, (code,))
connexion.commit()
if curseur.rowcount > 0:
print('Le cours a été supprimé avec succès !')
else:
print('Il n\'y a pas de cours qui correspond à ce code.')
except sqlite3.OperationalError as e:
print('Un problème a empêché la suppression du cours.')
traceback.print_exc(file=sys.stdout)
except Exception as e:
print('Une erreur inattendue est survenue.')
traceback.print_exc(file=sys.stdout)
▼Publicité