StatistiquesDataMapper.py 6.15 KB
Newer Older
Marine Marsal's avatar
Marine Marsal committed
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
119
120
121
122
123
import psycopg2
import string
from DataMapper import *

class StatistiquesDataMapper(DataMapper):
    # affiche la liste des exemplaires les plus emprunté dans l'ordre décroissant
    def ressourcesPopulaires(self, conn) : 
        conn = self.connect()
        try:
            cursor : psycopg2.extensions.cursor = conn.cursor()
            sql1 = "SELECT r.titre, COUNT(p.ref) nb_emprunt FROM Ressource r JOIN Exemplaire e ON e.ressource = r.codeUnique JOIN ExemplairePret ep ON ep.ref = e.ref GROUP BY r.titre HAVING COUNT(ep.ref) > 1 ORDER BY COUNT(ep.ref) DESC"
            cursor.execute(sql1)
            rows = cursor.fetchall()
            return rows
        except Exception as err:
            print(err)
        finally:
            conn.close()

        # print('Titre : {0} Nombre d\'emprunts : {1}\n'.format(row[0], row[1]))

    # affiche le nombre de fois qu'une ressource en particulier a été empruntée
    def nombreEmpruntRessource(self, codeUnique : int) : 
        conn = self.connect()
        try:
            cursor : psycopg2.extensions.cursor = conn.cursor()
            sql1 = "SELECT COUNT(ep.ref) nb_emprunt FROM Ressource r JOIN Exemplaire e ON e.ressource = r.codeUnique JOIN ExemplairePret ep ON ep.ref = e.ref WHERE r.codeUnique = '{0}' HAVING COUNT(ep.ref) > 1 ORDER BY COUNT(ep.ref) DESC".format(codeUnique)
            cursor.execute(sql1)
            ressource = cursor.fetchone()
            return ressource[0]
        except Exception as err:
            print(err)
        finally:
            conn.close()
        #print("Titre : {0} Nombre d\'emprunts : {1}".format(ressource[0], ressource[1]))

    # nombre de ressources empruntés par genre
    def genresPopulaires(self) : 
        conn = self.connect()
        try:
            cursor : psycopg2.extensions.cursor = conn.cursor()
            sql1 = "SELECT r.genre, COUNT(ep.ref) nb_emprunt FROM Ressource r JOIN Exemplaire ep ON e.ressource = r.codeUnique JOIN ExemplairePret ep ON ep.ref = e.ref GROUP BY r.genre HAVING COUNT(ep.ref) > 1 ORDER BY COUNT(ep.ref) DESC"
            cursor.execute(sql1)
            rows = cursor.fetchall()
            return rows
        except Exception as err:
            print(err)
        finally:
            conn.close()
        #  print('Genre : {0} Nombre d\'emprunts : {1}\n'.format(row[0], row[1]))

    # retourne le nombre de fois qu'une ressource a été empruntée
    def nombreEmpruntRessource(self, genre : int) : 
        conn = self.connect()
        try:
            cursor : psycopg2.extensions.cursor = conn.cursor()
            sql1 = "SELECT COUNT(ep.ref) nb_emprunt FROM Ressource r JOIN Exemplaire e ON e.ressource = r.codeUnique JOIN ExemplairePret ep ON ep.ref = e.ref WHERE r.genre = '{0}' GROUP BY  r.genre HAVING COUNT(ep.ref) > 1 ORDER BY COUNT(ep.ref) DESC".format(genre)
            cursor.execute(sql1)
            ressource = cursor.fetchone()
            return ressource[1]
        except Exception as err:
            print(err)
        finally:
            conn.close()
        #print("Genre : {0} Nombre d\'emprunts : {1}".format(ressource[0], ressource[1]))

    # retourne le genre de docuement le plus emprunté par un adhérent pour suggestion 
    def genrePrefereAdherent(self, login : string) : 
        conn = self.connect()
        try:
            cursor : psycopg2.extensions.cursor = conn.cursor()
            sql1 = "SELECT r.genre, nb_emprunt COUNT(ep.ref) FROM Ressource r JOIN Exemplaire e ON e.ressource = r.codeUnique JOIN ExemplairePret ep ON ep.ref = e.ref JOIN Pret p ON p.pretID = ep.pretID WHERE p.adherent = '{0}' GROUP BY  r.genre HAVING COUNT(ep.ref) > 1 ORDER BY COUNT(ep.ref) DESC".format(login)
            cursor.execute(sql1)
            genre = cursor.fetchall()
            return genre[0][0] # retourne le premier genre 
        except Exception as err:
            print(err)
        finally:
            conn.close()
        #print("Genre le plus emprunté : {0}".format(genre[1]))

    #retourne l'age moyen des adhérents
    def ageMoyenAdherent(self) : 
        conn = self.connect()
        try:
            cursor : psycopg2.extensions.cursor = conn.cursor()
            sql1 = "SELECT AVG(DATE_PART('year', now()) - DATE_PART('year', a.dateNaissance)) FROM Adherent a"
            cursor.execute(sql1)
            age = cursor.fetchone()
            return age[0]
        except Exception as err:
            print(err)
        finally:
            conn.close()
        #print("Genre le plus emprunté : {0}".format(genre[1]))

    def typeDocumentPopulaire(self) : 
        # retourne le type de document le plus emprunté ( livre, oeuvre musicale ou film )
        # on récupère le nombre de livre emprunté, le nb de oeuvre musicale empruntées et le nb de films empruntés.
        conn = self.connect()
        try:
            cursor : psycopg2.extensions.cursor = conn.cursor()
            sql1 = "SELECT COUNT(ep.ref) FROM Livre l JOIN Ressource r ON l.codeUnique = r.codeUnique JOIN Exemplaire e ON e.ressource = r.codeUnique JOIN ExemplairePret ep ON ep.refExemplaire = e.ref"
            cursor.execute(sql1)
            nbLivres = cursor.fetchone()
            sql2 = "SELECT COUNT(ep.ref) FROM OeuvreMusicale om JOIN Ressource r ON om.codeUnique = r.codeUnique JOIN Exemplaire e ON e.ressource = r.codeUnique JOIN ExemplairePret ep ON ep.refExemplaire = e.ref" 
            cursor.execute(sql2)
            nbOeuvres = cursor.fetchone()
            sql3 = "SELECT COUNT(ep.ref) FROM Film f JOIN Ressource r ON f.codeUnique = r.codeUnique JOIN Exemplaire e ON e.ressource = r.codeUnique JOIN ExemplairePret ep ON ep.refExemplaire = e.ref" 
            cursor.execute(sql3)
            nbFilms = cursor.fetchone()
            if(nbLivres[0] > nbFilms[0] and nbLivres[0] > nbOeuvres[0]) : 
                return "livres"
            elif(nbFilms[0] >= nbLivres[0] and nbFilms[0] > nbOeuvres[0]) : 
                return "oeuvres musicales"
            elif(nbOeuvres[0] > nbFilms[0] and nbOeuvres[0] > nbLivres[0]) : 
                return "films"
        except Exception as err:
            print(err)
        finally:
            conn.close()
# pour connaître le nom de la table d'où proviennent les données : 
# select v.tableoid::regclass from ville v