Formation PUB400 : Python, 2018 Opérations CRUD avec tkinter

10.2 Quand refermer la connexion ?


À venir jusqu'ici, les petits programmes que nous avons codés exécutaient à la queue-leu-leu trois opérations : se connecter à la base de données, effectuer la lecture et l'affichage puis refermer la connexion. Ceci est parfait dans une application qui ne fait que lire des données dans la base de données.

Ceci est moins pratique lorsqu'on désire insérer, modifier ou supprimer des données puis afficher les données résultantes. En effet, ce scénario impliquerait plusieurs boucles connexion - requête - déconnexion : une pour la lecture des données originales, une pour l'opération CRUD, et une troisième pour l'affichage des données résultantes. Pas très pratique.

Voici une structure de code plus intéressante. Elle consiste à utiliser le module atexit qui fait partie de la bibliothèque standard de Python. Le module atexit permet de programmer des actions à réaliser lorsque :

  • une application console se termine;
  • dans une application graphique, l'usager clique sur le bouton qui termine l'application;
  • dans une application graphique, l'usager clique sur le X dans le coin de la fenêtre.

Ex :

Python

...

import atexit

 

def fin_du_programme():

    """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\'avait pas été réussie, aucune fermeture nécessaire.')

 

...

 

########## programme principal ##########

 

atexit.register(fin_du_programme)

 

...

 

connexion = None

connexion = sqlite3.connect('file:mabd.db?mode=rw', uri=True)

 

...

 

fenetre.mainloop()

Remarquez que la ligne atexit.register(fin_du_programme) n'exécute pas la fonction fin_du_programme(). Son rôle est d'associer la fonction fin_du_programme() à l'événement « La fin du programme est arrivée ».

Attention : le code associé à atexit ne sera pas exécuté si le programme se termine de façon anormale (ex : quand il plante) ni lorsque le programme se termine par un appel à os._exit().

▼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