Formation PUB400 : Python, 2018 Suppression de données

6.2 Vérifier si la suppression a réussi


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 :

  • La requête SQL a généré une erreur
  • Il n'y avait pas d'enregistrement correspondant à la clause WHERE

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 :

Python

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 :

Python

#!/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é

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre