1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
class BaseDeDonnees(QObject):
""" Classe servant d'interface entre l'application et la base de données
Propriétés :
BaseDeDonnees.base : chemin absolu et nom de la base de données
Méthodes :
BaseDeDonnees.lire() : renvoie le résultat d'une requête sélection ou None, si rien n'est trouvé
BaseDeDonnees.écrire() : insère un nouvel enregistrement dans une table de la base de données ;
renvoie True si l'insertion s'est faite correctement ou False sinon
BaseDeDonnees.modifier() : modifie les informations d'un enregistrement préexistant d'une table de la base ;
renvoie True si la modification s'est faite correctement ou False sinon
BaseDeDonnees.supprimer() : efface un ou plusieurs enregistrements dans un table de la base ;
renvoie True si la suppression s'est faite correctement ou False sinon
Signaux :
accesBdd : émit lorsque qu'un accès à la bdd est tenté
"""
#Signaux
acces_bdd = pyqtSignal(str, int, name="accesBdd")
def __init__(self, base=None):
super(BaseDeDonnees, self).__init__()
self.__base = base
def __base(self):
return self.__base
def __setBase(self, base):
self.__base = base
base = property(fget=__base, fset=__setBase)
def __ouverture(self):
# Connection à la base de données
if os.path.isfile(self.__base):
self.__conn = sqlite3.connect(self.__base)
self.__cur = self.__conn.cursor()
#Activation des relations entre tables et de l'intégrité référentielle
self.__cur.execute("PRAGMA foreign_keys = ON")
else:
self.acces_bdd.emit("Base de données introuvable")
def __fermeture(self, msg, ok=True, id=0):
# Fermeture de la base de données
try:
if ok:
self.__conn.commit()
self.__cur.close()
self.__conn.close()
self.acces_bdd.emit(msg, id)
else:
self.__cur.close()
self.__conn.close()
self.acces_bdd.emit(msg, id)
except:
self.acces_bdd.emit("Base de données introuvable", id)
def __verification(self, sql):
self.__cur.execute(sql[0], sql[1])
return self.__cur.fetchall()
def lire(self, sql, id=0):
"""
Recherche dans les tables de la base de données les données correspondant aux critères spécifiés
La méthode renvoie les données trouvées.
"""
try:
donnees = []
self.__ouverture()
self.__cur.execute(sql[0], sql[1])
donnees = self.__cur.fetchall()
if len(donnees):
self.__fermeture("{} enregistrement(s) trouvé(s)".format(len(donnees)), True, id)
else:
self.__fermeture("Aucunes données trouvées", False)
return donnees
except:
self.__fermeture("Erreur lors de la lecture des données", False, id)
def ecrire(self, sql1, sql2):
"""
Ajoute un enregistrement à une table de la base de données
sql1 : requête servant à insérer les nouvelles données
sql2 : requête servant à récupérer l'id du nouvel enregistrement
La méthode renvoie l'id du nouvel enregistrement à travers le signal indiquant la réussite
"""
try:
self.__ouverture()
self.__cur.execute(sql1[0], sql1[1])
self.__conn.commit()
self.__cur.execute(sql2[0], sql2[1])
id = self.__cur.fetchall()[0][0]
self.__fermeture("Enregistrement et données ajoutés", True, id)
except:
self.__fermeture("Erreur lors de l'enregistrement des données", False)
def modifier(self, sql, id=0):
""" Modifie les informations d'un enregistrement d'une table de la base de données """
try:
self.__ouverture()
self.__cur.execute(sql[0], sql[1])
self.__fermeture("Enregistrement modifié", True, id)
except:
self.__fermeture("Erreur lors de la modification de l'enregistrement", False, id)
def supprimer(self, sql, id=0):
""" Supprime un enregistrement d'une table de la base de données"""
try:
self.__ouverture()
self.__cur.execute(sql[0], sql[1])
self.__fermeture("Enregistrement supprimé", True, id)
except:
self.__fermeture("Erreur lors de la suppression de l'enregistrement", False, id) |
Partager