示例#1
0
    def delete_select_arme_data(self, valeur_delete_dictionnaire):
        try:
            print(valeur_delete_dictionnaire)
            # OM 2019.04.02 Commande MySql pour la MODIFICATION de la valeur "CLAVIOTTEE" dans le champ "nameEditIntitulearmeHTML" du form HTML "armeEdit.html"
            # le "%s" permet d'éviter des injections SQL "simples"
            # <td><input type = "text" name = "nameEditIntitulearmeHTML" value="{{ row.intitule_arme }}"/></td>

            # OM 2020.04.07 C'EST LA QUE VOUS ALLEZ DEVOIR PLACER VOTRE PROPRE LOGIQUE MySql
            # Commande MySql pour afficher le arme sélectionné dans le tableau dans le formulaire HTML
            str_sql_select_id_arme = "SELECT id_arme, nom_arme, fk_munition, fk_type_arme FROM T_Armes WHERE id_arme = %(value_id_arme)s"

            # Du fait de l'utilisation des "context managers" on accède au curseur grâce au "with".
            # la subtilité consiste à avoir une gméthode "mabd_execute" dans la classe "MaBaseDeDonnee"
            # ainsi quand elle aura terminé l'insertion des données le destructeur de la classe "MaBaseDeDonnee"
            # sera interprété, ainsi on fera automatiquement un commit
            with MaBaseDeDonnee().connexion_bd as mconn_bd:
                with mconn_bd as mc_cur:
                    mc_cur.execute(str_sql_select_id_arme, valeur_delete_dictionnaire)
                    data_one = mc_cur.fetchall()
                    print("valeur_id_dictionnaire...", data_one)
                    return data_one

        except (Exception,
                pymysql.err.OperationalError,
                pymysql.ProgrammingError,
                pymysql.InternalError,
                pymysql.IntegrityError,
                TypeError) as erreur:
            # DEBUG bon marché : Pour afficher un message dans la console.
            print(f"Problème delete_select_arme_data Gestions arme numéro de l'erreur : {erreur}")
            # C'est une erreur à signaler à l'utilisateur de cette application WEB.
            flash(f"Flash. Problème delete_select_arme_data numéro de l'erreur : {erreur}", "danger")
            raise Exception("Raise exception... Problème delete_select_arme_data d\'un arme Data Gestions arme {erreur}")
示例#2
0
    def edit_arme_data(self, valeur_id_dictionnaire):
        try:
            print(valeur_id_dictionnaire)
            # OM 2020.04.07 C'EST LA QUE VOUS ALLEZ DEVOIR PLACER VOTRE PROPRE LOGIQUE MySql
            # Commande MySql pour afficher le arme sélectionné dans le tableau dans le formulaire HTML
            str_sql_id_arme = "SELECT id_arme, nom_arme, fk_munition, fk_type_arme FROM T_Armes WHERE id_arme = %(value_id_arme)s"

            # Du fait de l'utilisation des "context managers" on accède au curseur grâce au "with".
            # la subtilité consiste à avoir une méthode "mabd_execute" dans la classe "MaBaseDeDonnee"
            # ainsi quand elle aura terminé l'insertion des données le destructeur de la classe "MaBaseDeDonnee"
            # sera interprété, ainsi on fera automatiquement un commit
            with MaBaseDeDonnee().connexion_bd as mconn_bd:
                with mconn_bd as mc_cur:
                    mc_cur.execute(str_sql_id_arme, valeur_id_dictionnaire)
                    data_one = mc_cur.fetchall()
                    print("valeur_id_dictionnaire...", data_one)
                    return data_one

        except Exception as erreur:
            # OM 2020.03.01 Message en cas d'échec du bon déroulement des commandes ci-dessus.
            print(f"Problème edit_arme_data Data Gestions arme numéro de l'erreur : {erreur}")
            # flash(f"Flash. Problèmes Data Gestions arme numéro de l'erreur : {erreur}", "danger")
            # OM 2020.04.09 On dérive "Exception" par le "@obj_mon_application.errorhandler(404)" fichier "run_mon_app.py"
            # Ainsi on peut avoir un message d'erreur personnalisé.
            raise Exception(
                "Raise exception... Problème edit_arme_data d'un arme Data Gestions arme {erreur}")
示例#3
0
    def arme_afficher_data(self):
        try:
            # OM 2020.04.07 C'EST LA QUE VOUS ALLEZ DEVOIR PLACER VOTRE PROPRE LOGIQUE MySql
            # la commande MySql classique est "SELECT * FROM t_arme"
            # Pour "lever"(raise) une erreur s'il y a des erreurs sur les noms d'attributs dans la table
            # donc, je précise les champs à afficher
            strsql_arme_afficher = """SELECT id_arme, nom_arme, calibre, type_arme FROM T_Armes AS T1
INNER JOIN T_Munition AS FK1 ON T1.fk_munition = FK1.id_munition
INNER JOIN T_Type_arme AS FK2 ON T1.fk_type_arme = FK2.id_type_arme
ORDER BY id_arme ASC"""
            # Du fait de l'utilisation des "context managers" on accède au curseur grâce au "with".
            with MaBaseDeDonnee().connexion_bd.cursor() as mc_afficher:
                # Envoi de la commande MySql
                mc_afficher.execute(strsql_arme_afficher)
                # Récupère les données de la requête.
                data_arme = mc_afficher.fetchall()
                # Affichage dans la console
                print("data_arme ", data_arme, " Type : ", type(data_arme))
                # Retourne les données du "SELECT"
                return data_arme
        except pymysql.Error as erreur:
            print(f"DGG gad pymysql errror {erreur.args[0]} {erreur.args[1]}")
            raise  MaBdErreurPyMySl(f"DGG gad pymysql errror {msg_erreurs['ErreurPyMySql']['message']} {erreur.args[0]} {erreur.args[1]}")
        except Exception as erreur:
            print(f"DGG gad Exception {erreur.args}")
            raise MaBdErreurConnexion(f"DGG gad Exception {msg_erreurs['ErreurConnexionBD']['message']} {erreur.args}")
        except pymysql.err.IntegrityError as erreur:
            # OM 2020.04.09 On dérive "pymysql.err.IntegrityError" dans le fichier "erreurs.py"
            # Ainsi on peut avoir un message d'erreur personnalisé.
            raise MaBdErreurConnexion(f"DGG gad pei {msg_erreurs['ErreurConnexionBD']['message']} {erreur.args[1]}")
示例#4
0
    def concours_personne_delete(self, valeurs_insertion_dictionnaire):
        try:
            print(valeurs_insertion_dictionnaire)
            # OM 2020.04.07 C'EST LA QUE VOUS ALLEZ DEVOIR PLACER VOTRE PROPRE LOGIQUE MySql
            # Effacer une (des) association(s) existantes entre "id_personne" et "id_concours" dans la "t_concours_personne"
            strsql_delete_concours_personne = """DELETE FROM T_Concours_a_presence WHERE fk_concours = %(value_fk_concours)s AND fk_personne = %(value_fk_personne)s"""

            # Du fait de l'utilisation des "context managers" on accède au curseur grâce au "with".
            # la subtilité consiste à avoir une méthode "mabd_execute" dans la classe "MaBaseDeDonnee"
            # ainsi quand elle aura terminé l'insertion des données le destructeur de la classe "MaBaseDeDonnee"
            # sera interprété, ainsi on fera automatiquement un commit
            with MaBaseDeDonnee() as mconn_bd:
                mconn_bd.mabd_execute(strsql_delete_concours_personne,
                                      valeurs_insertion_dictionnaire)
        except (Exception, pymysql.err.OperationalError,
                pymysql.ProgrammingError, pymysql.InternalError,
                pymysql.IntegrityError, TypeError) as erreur:
            # DEBUG bon marché : Pour afficher un message dans la console.
            print(
                f"Problème concours_personne_delete Gestions concours personne numéro de l'erreur : {erreur}"
            )
            # C'est une erreur à signaler à l'utilisateur de cette application WEB.
            flash(
                f"Flash. Problème concours_personne_delete Gestions concours personne  numéro de l'erreur : {erreur}",
                "danger")
            raise Exception(
                "Raise exception... Problème concours_personne_delete Gestions concours personne  {erreur}"
            )
示例#5
0
    def update_arme_data(self, valeur_update_dictionnaire):
        try:
            print(valeur_update_dictionnaire)
            # OM 2019.04.02 Commande MySql pour la MODIFICATION de la valeur "CLAVIOTTEE" dans le champ "nameEditIntitulearmeHTML" du form HTML "armeEdit.html"
            # le "%s" permet d'éviter des injections SQL "simples"
            # <td><input type = "text" name = "nameEditIntitulearmeHTML" value="{{ row.intitule_arme }}"/></td>
            str_sql_update_intitulearme = "UPDATE T_Armes SET nom_arme = %(value_nom_arme)s, fk_munition = %(value_fk_munition)s, fk_type_arme = %(value_fk_type_arme)s WHERE id_arme = %(value_id_arme)s"

            # Du fait de l'utilisation des "context managers" on accède au curseur grâce au "with".
            # la subtilité consiste à avoir une méthode "mabd_execute" dans la classe "MaBaseDeDonnee"
            # ainsi quand elle aura terminé l'insertion des données le destructeur de la classe "MaBaseDeDonnee"
            # sera interprété, ainsi on fera automatiquement un commit
            with MaBaseDeDonnee().connexion_bd as mconn_bd:
                with mconn_bd as mc_cur:
                    mc_cur.execute(str_sql_update_intitulearme, valeur_update_dictionnaire)

        except (Exception,
                pymysql.err.OperationalError,
                pymysql.ProgrammingError,
                pymysql.InternalError,
                pymysql.IntegrityError,
                TypeError) as erreur:
            # OM 2020.03.01 Message en cas d'échec du bon déroulement des commandes ci-dessus.
            print(f"Problème update_arme_data Data Gestions arme numéro de l'erreur : {erreur}")
            # flash(f"Flash. Problèmes Data Gestions arme numéro de l'erreur : {erreur}", "danger")
            # raise Exception('Raise exception... Problème update_arme_data d\'un arme Data Gestions arme {}'.format(str(erreur)))
            if erreur.args[0] == 1062:
                flash(f"Flash. Cette valeur existe déjà : {erreur}", "danger")
                # Deux façons de communiquer une erreur causée par l'insertion d'une valeur à double.
                flash('Doublon !!! Introduire une valeur différente')
                # Message en cas d'échec du bon déroulement des commandes ci-dessus.
                print(f"Problème update_arme_data Data Gestions arme numéro de l'erreur : {erreur}")

                raise Exception("Raise exception... Problème update_arme_data d'un arme DataGestionsarme {erreur}")
示例#6
0
    def concours_personne_afficher_data_concat(self, id_personne_selected):
        print("id_personne_selected  ", id_personne_selected)
        try:
            # OM 2020.04.07 C'EST LA QUE VOUS ALLEZ DEVOIR PLACER VOTRE PROPRE LOGIQUE MySql
            # la commande MySql classique est "SELECT * FROM t_concours"
            # Pour "lever"(raise) une erreur s'il y a des erreurs sur les noms d'attributs dans la table
            # donc, je précise les champs à afficher

            strsql_concours_personne_afficher_data_concat = """SELECT id_personne, nom_pers, prenom_pers, possession_arme,
                                                            GROUP_CONCAT(date_concours) as concourspersonne FROM T_Concours_a_presence AS T1
                                                            RIGHT JOIN T_Personne AS T2 ON T2.id_personne = T1.fk_personne
                                                            LEFT JOIN T_Concours AS T3 ON T3.id_concours = T1.fk_concours
                                                            GROUP BY id_personne"""

            # Du fait de l'utilisation des "context managers" on accède au curseur grâce au "with".
            with MaBaseDeDonnee().connexion_bd.cursor() as mc_afficher:
                # le paramètre 0 permet d'afficher tous les personne
                # Sinon le paramètre représente la valeur de l'id du personne
                if id_personne_selected == 0:
                    mc_afficher.execute(
                        strsql_concours_personne_afficher_data_concat)
                else:
                    # Constitution d'un dictionnaire pour associer l'id du personne sélectionné avec un nom de variable
                    valeur_id_personne_selected_dictionnaire = {
                        "value_id_personne_selected": id_personne_selected
                    }
                    strsql_concours_personne_afficher_data_concat += """ HAVING id_personne= %(value_id_personne_selected)s"""
                    # Envoi de la commande MySql
                    mc_afficher.execute(
                        strsql_concours_personne_afficher_data_concat,
                        valeur_id_personne_selected_dictionnaire)

                # Récupère les données de la requête.
                data_concours_personne_afficher_concat = mc_afficher.fetchall()
                # Affichage dans la console
                print("dggf data_concours_personne_afficher_concat ",
                      data_concours_personne_afficher_concat, " Type : ",
                      type(data_concours_personne_afficher_concat))

                # Retourne les données du "SELECT"
                return data_concours_personne_afficher_concat

        except pymysql.Error as erreur:
            print(
                f"DGGF gfadc pymysql errror {erreur.args[0]} {erreur.args[1]}")
            raise MaBdErreurPyMySl(
                f"DGG gad pymysql errror {msg_erreurs['ErreurPyMySql']['message']} {erreur.args[0]} {erreur.args[1]}"
            )
        except Exception as erreur:
            print(f"DGGF gfadc Exception {erreur.args}")
            raise MaBdErreurConnexion(
                f"DGG gfadc Exception {msg_erreurs['ErreurConnexionBD']['message']} {erreur.args}"
            )
        except pymysql.err.IntegrityError as erreur:
            # OM 2020.04.09 On dérive "pymysql.err.IntegrityError" dans le fichier "erreurs.py"
            # Ainsi on peut avoir un message d'erreur personnalisé.
            raise MaBdErreurConnexion(
                f"DGGF gfadc pei {msg_erreurs['ErreurConnexionBD']['message']} {erreur.args[1]}"
            )
示例#7
0
 def __init__(self):
     try:
         # DEBUG bon marché : Pour afficher un message dans la console.
         print("dans le try de gestions arme")
         # OM 2020.04.11 La connexion à la base de données est-elle active ?
         # Renvoie une erreur si la connexion est perdue.
         MaBaseDeDonnee().connexion_bd.ping(False)
     except Exception as erreur:
         flash("Dans Gestion arme ...terrible erreur, il faut connecter une base de donnée", "Danger")
         # DEBUG bon marché : Pour afficher un message dans la console.
         print(f"Exception grave Classe constructeur Gestionarme {erreur.args[0]}")
         # Ainsi on peut avoir un message d'erreur personnalisé.
         raise MaBdErreurConnexion(f"{msg_erreurs['ErreurConnexionBD']['message']} {erreur.args[0]}")
     print("Classe constructeur Gestionarme ")
示例#8
0
    def add_arme_data(self, valeurs_insertion_dictionnaire):
        try:
            print(valeurs_insertion_dictionnaire)
            # OM 2020.04.07 C'EST LA QUE VOUS ALLEZ DEVOIR PLACER VOTRE PROPRE LOGIQUE MySql
            strsql_insert_arme = """INSERT INTO T_Armes (id_arme, nom_arme, fk_munition, fk_type_arme) VALUES (NULL, %(value_nom_arme)s, %(value_fk_munition)s, %(value_fk_type_arme)s)"""
            # Du fait de l'utilisation des "context managers" on accède au curseur grâce au "with".
            # la subtilité consiste à avoir une méthode "mabd_execute" dans la classe "MaBaseDeDonnee"
            # ainsi quand elle aura terminé l'insertion des données le destructeur de la classe "MaBaseDeDonnee"
            # sera interprété, ainsi on fera automatiquement un commit
            with MaBaseDeDonnee() as mconn_bd:
                mconn_bd.mabd_execute(strsql_insert_arme, valeurs_insertion_dictionnaire)


        except pymysql.err.IntegrityError as erreur:
            # OM 2020.04.09 On dérive "pymysql.err.IntegrityError" dans "MaBdErreurDoublon" fichier "erreurs.py"
            # Ainsi on peut avoir un message d'erreur personnalisé.
            raise MaBdErreurDoublon(f"DGG pei erreur doublon {msg_erreurs['ErreurDoublonValue']['message']} et son status {msg_erreurs['ErreurDoublonValue']['status']}")
示例#9
0
    def delete_concours_data(self, valeur_delete_dictionnaire):
        try:
            print(valeur_delete_dictionnaire)
            # OM 2019.04.02 Commande MySql pour EFFACER la valeur sélectionnée par le "bouton" du form HTML "concoursEdit.html"
            # le "%s" permet d'éviter des injections SQL "simples"
            # <td><input type = "text" name = "nameEditdateconcoursHTML" value="{{ row.date_concours }}"/></td>
            str_sql_delete_dateconcours = "DELETE FROM T_Concours WHERE id_concours = %(value_id_concours)s"

            # Du fait de l'utilisation des "context managers" on accède au curseur grâce au "with".
            # la subtilité consiste à avoir une méthode "mabd_execute" dans la classe "MaBaseDeDonnee"
            # ainsi quand elle aura terminé l'insertion des données le destructeur de la classe "MaBaseDeDonnee"
            # sera interprété, ainsi on fera automatiquement un commit
            with MaBaseDeDonnee().connexion_bd as mconn_bd:
                with mconn_bd as mc_cur:
                    mc_cur.execute(str_sql_delete_dateconcours,
                                   valeur_delete_dictionnaire)
                    data_one = mc_cur.fetchall()
                    print("valeur_id_dictionnaire...", data_one)
                    return data_one
        except (Exception, pymysql.err.OperationalError,
                pymysql.ProgrammingError, pymysql.InternalError,
                pymysql.IntegrityError, TypeError) as erreur:
            # DEBUG bon marché : Pour afficher un message dans la console.
            print(
                f"Problème delete_concours_data Data Gestions concours numéro de l'erreur : {erreur}"
            )
            flash(
                f"Flash. Problèmes Data Gestions concours numéro de l'erreur : {erreur}",
                "danger")
            if erreur.args[0] == 1451:
                # OM 2020.04.09 Traitement spécifique de l'erreur 1451 Cannot delete or update a parent row: a foreign key constraint fails
                # en MySql le moteur INNODB empêche d'effacer un concours qui est associé à un personne dans la table intermédiaire "t_concours_personne"
                # il y a une contrainte sur les FK de la table intermédiaire "t_concours_personne"
                # C'est une erreur à signaler à l'utilisateur de cette application WEB.
                flash(
                    f"Flash. IMPOSSIBLE d'effacer !!! Ce concours est associé à des personne dans la t_concours_personne !!! : {erreur}",
                    "danger")
                # DEBUG bon marché : Pour afficher un message dans la console.
                print(
                    f"IMPOSSIBLE d'effacer !!! Ce concours est associé à des personne dans la t_concours_personne !!! : {erreur}"
                )
            raise MaBdErreurDelete(
                f"DGG Exception {msg_erreurs['ErreurDeleteContrainte']['message']} {erreur}"
            )
    def add_concours_data(self, valeurs_insertion_dictionnaire):
        try:
            # # Définitions d'un dictionnaire pour passer les valeurs en paramètres de façon un "peu" sécurisée dans la BD
            # valeurs_insertion_dictionnaire = {'value_nom_film': valeur_ins_1, 'value_duree_film': valeur_ins_2,
            #                                   'date_sortie_film': valeur_ins_3}
            # Rssure la concours qui dévelloppe que les valeurs à insérer sont bien à disposition.concours
            print(valeurs_insertion_dictionnaire)
            str_sql_insert = "INSERT INTO T_Concours (id_concours, date_concours, fk_type_concours, fk_stand_de_tir) " \
                             "VALUES (NULL, %(value_date_concours)s, %(value_fk_type_concours)s, " \
                             "%(value_fk_stand_de_tir)s)"
            with MaBaseDeDonnee() as ma_bd_curseur:
                # OM Méthode "execute" définie simplement pour raccourcir la ligne de code
                # ligne de code normale : ma_bd_moi.connexion_bd.cursor(str_sql_insert, valeurs_insertion_dictionnaire)
                ma_bd_curseur.mabd_execute(str_sql_insert,
                                           valeurs_insertion_dictionnaire)

        except Exception as erreur:
            # OM 2020.04.09 DIFFERENTS MOYENS D'INFORMER EN CAS D'ERREURS.
            # Message dans la console en cas d'échec du bon déroulement des commandes ci-dessus.
            print("Data Gestions concours ERREUR: {0}".format(erreur))
            print(
                f"Print console ... Data Gestions concours, numéro de l'erreur : {erreur}"
            )
            # Petits messages "flash", échange entre Python et Jinja dans une page en HTML
            flash(
                f"Flash ... Data Gestions concours, numéro de l'erreur : {erreur}"
            )
            # raise, permet de "lever" une exception et de personnaliser la page d'erreur
            # voir fichier "run_mon_app.py"

            print("erreur args.. ", erreur.args)
            code, msg = erreur.args
            print(" codes d'erreurs ---> ", error_codes.get(code, msg))
            # OM 2020.04.09 On dérive "Exception" par le "@obj_mon_application.errorhandler(404)" fichier "run_mon_app.py"
            # Ainsi on peut avoir un message d'erreur personnalisé.
            raise Exception(
                f"Raise exception... Data Gestions concours {erreur}")
示例#11
0
    def concours_personne_afficher_data(self,
                                        valeur_id_personne_selected_dict):
        print("valeur_id_personne_selected_dict...",
              valeur_id_personne_selected_dict)
        try:

            # OM 2020.04.07 C'EST LA QUE VOUS ALLEZ DEVOIR PLACER VOTRE PROPRE LOGIQUE MySql
            # la commande MySql classique est "SELECT * FROM t_concours"
            # Pour "lever"(raise) une erreur s'il y a des erreurs sur les noms d'attributs dans la table
            # donc, je précise les champs à afficher

            strsql_personne_selected = """SELECT id_personne, nom_pers, prenom_pers, possession_arme, GROUP_CONCAT(id_concours) as concourspersonne FROM T_Concours_a_presence AS T1
                                        INNER JOIN T_Personne AS T2 ON T2.id_personne = T1.fk_personne
                                        INNER JOIN T_Concours AS T3 ON T3.id_concours = T1.fk_concours
                                        WHERE id_personne = %(value_id_personne_selected)s"""

            # strsql_concours_personne_non_attribues = """SELECT id_concours, date_concours, type_concours, nom_stand_de_tir, adresse_stand_de_tir FROM T_Concours AS T1
            #                                 INNER JOIN T_Type_concours AS FK1 ON T1.fk_type_concours = FK1.id_type_concours
            #                                 INNER JOIN T_Stand_de_tir AS FK2 ON T1.fk_stand_de_tir = FK2.id_stand_de_tir
            #                                 WHERE id_concours not in (SELECT id_concours as idconcourspersonne FROM T_Concours_a_presence AS T2
            #                                 INNER JOIN T_Personne AS T3 ON T3.id_personne = T2.fk_personne
            #                                 INNER JOIN T_Concours AS T4 ON T4.id_concours = T2.fk_concours
            #                                 WHERE id_personne = %(valeur_id_personne_selected_dict)s)"""

            strsql_concours_personne_non_attribues = """SELECT id_concours, date_concours FROM T_Concours
                                                        WHERE id_concours not in(SELECT id_concours as idconcourspersonne FROM T_Concours_a_presence AS T1
                                                        INNER JOIN T_Personne AS T2 ON T2.id_personne = T1.fk_personne
                                                        INNER JOIN T_Concours AS T3 ON T3.id_concours = T1.fk_concours
                                                        WHERE id_personne = %(value_id_personne_selected)s)"""

            # strsql_concours_personne_attribues = """SELECT id_personne, id_concours, date_concours, type_concours, nom_stand_de_tir, adresse_stand_de_tir FROM T_Concours_a_presence AS T1
            #                                 INNER JOIN T_Personne AS T2 ON T2.id_personne = T1.fk_personne
            #                                 INNER JOIN T_Concours AS T3 ON T3.id_concours = T1.fk_concours
            #                                 INNER JOIN T_Type_concours AS FK1 ON T3.fk_type_concours = FK1.id_type_concours
            #                                 INNER JOIN T_Stand_de_tir AS FK2 ON T3.fk_stand_de_tir = FK2.id_stand_de_tir
            #                                 WHERE id_personne = %(valeur_id_personne_selected_dict)s"""

            strsql_concours_personne_attribues = """SELECT id_personne, id_concours, date_concours FROM T_Concours_a_presence AS T1
                                                    INNER JOIN T_Personne AS T2 ON T2.id_personne = T1.fk_personne 
                                                    INNER JOIN T_Concours AS T3 ON T3.id_concours = T1.fk_concours
                                                    WHERE id_personne = %(value_id_personne_selected)s"""

            # Du fait de l'utilisation des "context managers" on accède au curseur grâce au "with".
            with MaBaseDeDonnee().connexion_bd.cursor() as mc_afficher:
                # Envoi de la commande MySql
                mc_afficher.execute(strsql_concours_personne_non_attribues,
                                    valeur_id_personne_selected_dict)
                # Récupère les données de la requête.
                data_concours_personne_non_attribues = mc_afficher.fetchall()
                # Affichage dans la console
                print("dfad data_concours_personne_non_attribues ",
                      data_concours_personne_non_attribues, " Type : ",
                      type(data_concours_personne_non_attribues))

                # Envoi de la commande MySql
                mc_afficher.execute(strsql_personne_selected,
                                    valeur_id_personne_selected_dict)
                # Récupère les données de la requête.
                data_personne_selected = mc_afficher.fetchall()
                # Affichage dans la console
                print("data_personne_selected  ", data_personne_selected,
                      " Type : ", type(data_personne_selected))

                # Envoi de la commande MySql
                mc_afficher.execute(strsql_concours_personne_attribues,
                                    valeur_id_personne_selected_dict)
                # Récupère les données de la requête.
                data_concours_personne_attribues = mc_afficher.fetchall()
                # Affichage dans la console
                print("data_concours_personne_attribues ",
                      data_concours_personne_attribues, " Type : ",
                      type(data_concours_personne_attribues))

                # Retourne les données du "SELECT"
                return data_personne_selected, data_concours_personne_non_attribues, data_concours_personne_attribues
        except pymysql.Error as erreur:
            print(
                f"DGGF gfad pymysql errror {erreur.args[0]} {erreur.args[1]}")
            raise MaBdErreurPyMySl(
                f"DGG gad pymysql errror {msg_erreurs['ErreurPyMySql']['message']} {erreur.args[0]} {erreur.args[1]}"
            )
        except Exception as erreur:
            print(f"DGGF gfad Exception {erreur.args}")
            raise MaBdErreurConnexion(
                f"DGG gad Exception {msg_erreurs['ErreurConnexionBD']['message']} {erreur.args}"
            )
        except pymysql.err.IntegrityError as erreur:
            # OM 2020.04.09 On dérive "pymysql.err.IntegrityError" dans le fichier "erreurs.py"
            # Ainsi on peut avoir un message d'erreur personnalisé.
            raise MaBdErreurConnexion(
                f"DGGF gfad pei {msg_erreurs['ErreurConnexionBD']['message']} {erreur.args[1]}"
            )
    def concours_afficher_data(self, valeur_order_by, id_concours_sel):
        try:
            print("valeur_order_by ", valeur_order_by, type(valeur_order_by))

            # Du fait de l'utilisation des "context managers" on accède au curseur grâce au "with".
            with MaBaseDeDonnee().connexion_bd.cursor() as mc_afficher:
                # Afficher soit la liste des concours dans l'ordre inverse ou simplement le concours sélectionné
                # par l'action edit
                if valeur_order_by == "ASC" and id_concours_sel == 0:
                    strsql_concours_afficher = """SELECT id_concours, date_concours, type_concours, nom_stand_de_tir, adresse_stand_de_tir FROM T_Concours AS T1
            INNER JOIN T_Type_concours AS FK1 ON T1.fk_type_concours = FK1.id_type_concours
            INNER JOIN T_Stand_de_tir AS FK2 ON T1.fk_stand_de_tir = FK2.id_stand_de_tir
            ORDER BY id_concours ASC"""
                    mc_afficher.execute(strsql_concours_afficher)
                elif valeur_order_by == "ASC":
                    # OM 2020.04.07 C'EST LA QUE VOUS ALLEZ DEVOIR PLACER VOTRE PROPRE LOGIQUE MySql
                    # la commande MySql classique est "SELECT * FROM t_concours"
                    # Pour "lever"(raise) une erreur s'il y a des erreurs sur les noms d'attributs dans la table
                    # donc, je précise les champs à afficher
                    # Constitution d'un dictionnaire pour associer l'id du concours sélectionné avec un nom de variable
                    valeur_id_concours_selected_dictionnaire = {
                        "value_id_concours_selected": id_concours_sel
                    }
                    strsql_concours_afficher = """SELECT id_concours, date_concours, type_concours, nom_stand_de_tir, adresse_stand_de_tir FROM T_Concours AS T1
            INNER JOIN T_Type_concours AS FK1 ON T1.fk_type_concours = FK1.id_type_concours
            INNER JOIN T_Stand_de_tir AS FK2 ON T1.fk_stand_de_tir = FK2.id_stand_de_tir
            WHERE id_concours = %(valeur_id_concours_selected)s"""
                    # Envoi de la commande MySql
                    mc_afficher.execute(
                        strsql_concours_afficher,
                        valeur_id_concours_selected_dictionnaire)
                else:
                    strsql_concours_afficher = """SELECT id_concours, date_concours, type_concours, nom_stand_de_tir, adresse_stand_de_tir FROM T_Concours AS T1
            INNER JOIN T_Type_concours AS FK1 ON T1.fk_type_concours = FK1.id_type_concours
            INNER JOIN T_Stand_de_tir AS FK2 ON T1.fk_stand_de_tir = FK2.id_stand_de_tir
            ORDER BY id_concours DESC"""
                    # Envoi de la commande MySql
                    mc_afficher.execute(strsql_concours_afficher)
                # Récupère les données de la requête.
                data_concours = mc_afficher.fetchall()
                # Affichage dans la console
                print("data_concours ", data_concours, " Type : ",
                      type(data_concours))
                # Retourne les données du "SELECT"
                return data_concours
        except pymysql.Error as erreur:
            print(f"DGG gad pymysql errror {erreur.args[0]} {erreur.args[1]}")
            raise MaBdErreurPyMySl(
                f"DGG gad pymysql errror {msg_erreurs['ErreurPyMySql']['message']} {erreur.args[0]} {erreur.args[1]}"
            )
        except Exception as erreur:
            print(f"DGG gad Exception {erreur.args}")
            raise MaBdErreurConnexion(
                f"DGG gad Exception {msg_erreurs['ErreurConnexionBD']['message']} {erreur.args}"
            )
        except pymysql.err.IntegrityError as erreur:
            # OM 2020.04.09 On dérive "pymysql.err.IntegrityError" dans le fichier "erreurs.py"
            # Ainsi on peut avoir un message d'erreur personnalisé.
            raise MaBdErreurConnexion(
                f"DGG gad pei {msg_erreurs['ErreurConnexionBD']['message']} {erreur.args[1]}"
            )