Code source de gestionPostgreSql

"""
    pyFormation.gestionPostgreSql
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Le module implémente la gestion de la base PostgreSql.

    :copyright: (c) 2015 par moulinux.
    :license: GPLv3, voir la LICENCE pour plus d'informations.
"""
import psycopg2
import psycopg2.extras
import config


[docs]class GestionBd: """Mise en place et interfaçage d'une base de données PostgreSQL"""
[docs] def __init__(self): """Établissement de la connexion - Création du curseur""" try: self.baseDonn = \ psycopg2.connect(dbname=config.DB_NAME, user=config.USER, password=config.PASSWD, host=config.HOST) except psycopg2.DatabaseError as err: print('La connexion avec la base de données a échoué :\n', 'Erreur détectée :{}'.format(err)) self.echec = True else: # création d'un curseur de type dictionnaire : self.baseDonn.autocommit = True self.cursor = \ self.baseDonn.cursor(cursor_factory=psycopg2.extras.DictCursor) self.echec = False
[docs] def executerReq(self, req, params): """Exécution de la requête <req>, avec détection d'erreur éventuelle""" try: self.cursor.execute(req, params) except Exception as err: # afficher la requête et le message d'erreur système : print("Requête SQL incorrecte :\n{}\nErreur détectée :{}" .format(req, err)) return False else: return True
[docs] def resultatReq(self): """ renvoie le résultat de la requête précédente (une liste de tuples) """ return self.cursor.fetchall()
[docs] def valider(self): """transfert du curseur vers le disque""" if self.baseDonn: self.baseDonn.commit()
[docs] def fermer(self): """fermeture du curseur""" if self.baseDonn: self.cursor.close() self.baseDonn.close()
[docs] def connBase(self): """ indique si la connexion a réussie ou échouée. :return: True si la connexion a échouée, False sinon :rtype: booléen """ return self.echec
[docs] def obtenirActivites(self): """ Retourne le jeu des enregistrements des activités. :return: jeu des enregistrements des activités :rtype: list """ reqSql = """SELECT * FROM "Activite" ORDER BY numero""" if self.executerReq(reqSql, ()): return self.resultatReq() return None
[docs] def obtenirActions(self, numActivite): """ Retourne le jeu des enregistrements des actions de formation correspondant à une activité. :param numActivite: activité correspondant aux actions de formation :type numActivite: entier :return: jeu des enregistrements des actions de formation :rtype: list """ reqSql = """SELECT * FROM "Action" WHERE "numeroActivite"=%s ORDER BY code""" if self.executerReq(reqSql, (numActivite,)): return self.resultatReq() return None
[docs] def obtenirSessions(self, uneAction): """ Retourne le jeu des enregistrements des sessions correspondant à une action de formation. :param uneAction: action correspondant aux sessions :type uneAction: chaîne de caractères :return: jeu des enregistrements des sessions :rtype: list """ reqSql = """SELECT S.*, L.libelle AS "nomLieu" FROM "Session" AS S, "Lieu" AS L WHERE "codeAction"=%s AND S."idLieu" = L."id" ORDER BY numero""" if self.executerReq(reqSql, (uneAction,)): return self.resultatReq() return None
[docs] def obtenirParametres(self): """ Retourne le jeu des enregistrements des paramètres. :return: enregistrement des paramètres :rtype: dictionnaire """ reqSql = """SELECT * FROM "Parametre" ORDER BY id""" if self.executerReq(reqSql, ()): return self.resultatReq()[0] return None
[docs] def obtenirLieux(self): """ Retourne le jeu des enregistrements des lieux. :return: jeu des enregistrements des lieux :rtype: list """ reqSql = """SELECT * FROM "Lieu" ORDER BY id""" if self.executerReq(reqSql, ()): return self.resultatReq() return None
[docs] def detailSession(self, numSession): """ Détaille une session. :param numSession: identifiant de la session :type numSession: entier :return: enregistrement de la session :rtype: dictionnaire """ reqSql = """SELECT * FROM "Session" WHERE numero=%s""" if self.executerReq(reqSql, (numSession,)): return self.resultatReq()[0] return None
[docs] def creerSession(self, unTupSession): """ Crée une nouvelle session. :param unTupSession: paramètres de la session :type unTupSession: tuple :return: True si la création a réussie, False sinon :rtype: booléen """ reqSql = """INSERT INTO "Session" ("codeAction", "idLieu", "nombreMaxParticipant", "dateSession", "coutPrevu", "forfaitJournalier", "distanceMin") VALUES (%s,%s,%s,%s,%s,%s,%s)""" test = self.executerReq(reqSql, unTupSession) return test
[docs] def modifierSession(self, unTupSession): """ Modifie une session. :param unTupSession: paramètres de la session :type unTupSession: tuple :return: True si la modification a réussie, False sinon :rtype: booléen """ reqSql = """UPDATE "Session" SET "idLieu"=%s, "nombreMaxParticipant"=%s, "dateSession"=%s, "coutPrevu"=%s, "coutReel"=%s WHERE numero=%s""" test = self.executerReq(reqSql, unTupSession) return test
[docs] def supprimerSession(self, numSession): """ Suppprime une session. :param numSession: identifiant de la session :type numSession: entier :return: True si la suppression a réussie, False sinon :rtype: booléen """ reqSql = """DELETE FROM "Session" WHERE "numero"=%s""" test = self.executerReq(reqSql, (numSession,)) return test
[docs] def trouverNbInscrits(self, numSession): """ Trouve le nombre d'agent inscrits à une session. :param numSession: identifiant de la session :type numSession: entier :return: le nombre d'inscrits :rtype: entier """ reqSql = """SELECT COUNT(*) as "nbInscrits" FROM "Inscription" WHERE "numeroSession"=%s""" if self.executerReq(reqSql, (numSession,)): return self.resultatReq()[0]['nbInscrits'] return 0