Commit b49bbb13 authored by Oceane Bordeau's avatar Oceane Bordeau
Browse files

requetes 13,14,23,26

parent ca47d4dc
import psycopg2
import datetime
conn = psycopg2.connect("host=%s dbname=%s user=%s password=%s" % (
"tuxa.sme.utc", "dbnf18a037", "nf18a037", "1AfyGsAH"))
......@@ -10,7 +11,7 @@ def inserer_musee():
ville = input("ville du musee")
adresse = input("adresse complete du musée : ")
cur = conn.cursor()
if nom and codep and ville and adresse :
if nom and codep and ville and adresse:
try:
sql = f"INSERT INTO MUSEE_EXT ( nom, adresse, cp, ville) VALUES ('{nom}', '{adresse}', '{codep}', '{ville}');"
cur.execute(sql)
......@@ -19,7 +20,7 @@ def inserer_musee():
except psycopg2.DataError as e:
print("echec de l'insertion")
print(e)
else :
else:
print("tentative d'ajout d'une valeur nulle, retour")
print()
......@@ -39,7 +40,7 @@ def inserer_neolitique():
def inserer_expoperm():
nom = input("Entrez le nom de l'expo")
cur = conn.cursor()
if nom :
if nom:
try:
sql = f"INSERT INTO EXPO_PERM VALUES '{nom}');"
cur.execute(sql)
......@@ -48,7 +49,7 @@ def inserer_expoperm():
except psycopg2.DataError as e:
print("echec de l'insertion")
print(e)
else :
else:
print("tentative d'ajout d'une valeur nulle, retour")
print()
......@@ -170,7 +171,7 @@ def liste_oeuvre_pretees():
sql = "SELECT prete.IDO, titre, fin FROM prete JOIN oeuvre_louvre ON prete.IDO = oeuvre_louvre.ido WHERE debut < CURRENT_DATE AND fin > CURRENT_DATE ORDER BY fin;"
cur.execute(sql)
raw = cur.fetchone()
print("Liste des oeuvre du Louvres en cours de prêt :")
print("\nListe des oeuvre du Louvres en cours de prêt :")
while raw:
print(f"Oeuvre numero : {raw[0]} :")
print(f" Titre : {raw[1]}")
......@@ -178,12 +179,13 @@ def liste_oeuvre_pretees():
print()
raw = cur.fetchone()
def temp_moyen_pret():
cur = conn.cursor()
sql = "SELECT idm, nom, adresse, AVG(ROUND(fin - debut)) FROM Prete JOIN Musee_ext ON prete.musee = musee_ext.IDM GROUP BY idm, musee_ext adresse, nom;"
cur.execute(sql)
raw = cur.fetchone()
print("Temps moyen d'un prêt (par musée):")
print("\nTemps moyen d'un prêt (par musée):")
while raw:
print(f"musée partenaire : {raw[0]} :")
print(f" adresse : {raw[1]}")
......@@ -191,6 +193,7 @@ def temp_moyen_pret():
print()
raw = cur.fetchone()
def informations_oeuvres():
cur = conn.cursor()
sql = 'SELECT O.ido, O.titre , O.prix_acq, count(R.oeuvre) as "Nombre restaurations", sum(R.montant) as "Total montant restaurations" FROM OEUVRE_LOUVRE O \
......@@ -198,8 +201,8 @@ def informations_oeuvres():
SELECT oe.ido, oe.titre, NULL AS prix, -1 AS "Nombre restaurations", NULL AS "Total montant restaurations" FROM oeuvre_ext oe;'
cur.execute(sql)
raw = cur.fetchone()
print("Informations sur chaque oeuvre :")
while raw :
print("\nInformations sur chaque oeuvre :")
while raw:
if raw[2] != None:
print(f"Nom de l'oeuvre : {raw[1]} (id:{raw[0]}) ")
print(f" prix d'acquisition : {raw[2]}")
......@@ -211,46 +214,197 @@ def informations_oeuvres():
print()
raw = cur.fetchone()
def nb_creneaux():
cur = conn.cursor()
sql = 'SELECT IDG, nom, prenom, adresse, date_embauche, COUNT(Guide.IDG) FROM Guide JOIN Affecter_perm ON Guide.IDG = Affecter_perm.guide GROUP BY IDG;'
cur.execute(sql)
raw = cur.fetchone()
i = 1
while raw:
print(f'\nGuide {i} :')
print(f' Nom : {raw[1]}')
print(f' Prenom : {raw[2]}')
print(f' Adresse : {raw[3]}')
print(f" Date d'embauche : {raw[4]}")
print(f' Nombre de créneaux attribués : {raw[5]}\n')
raw = cur.fetchone()
def nb_expos():
cur = conn.cursor()
sql = 'SELECT num, capacite, COUNT(salle) AS c, SUM(fin - debut) FROM Salle JOIN Exposer ON Salle.num = Exposer.salle JOIN Expo_temp ON Exposer.expo = Expo_temp.nom GROUP BY num ORDER BY c DESC;'
cur.execute(sql)
raw = cur.fetchone()
while raw:
print(f'\nSalle {raw[0]} :')
print(f' Capacité : {raw[1]}')
print(f" Nombre d'expositions : {raw[2]}")
print(f' Durée cumulée : {raw[3]} jours\n')
raw = cur.fetchone()
def insert_date():
andeb = int(input("Entrez l'année de début\n"))
mdeb = int(input("Entrez le mois de début\n"))
jdeb = int(input("Entrez le jour de début\n"))
anfin = int(input("Entrez l'année de fin\n"))
mfin = int(input("Entrez le mois de fin\n"))
jfin = int(input("Entrez le jour de fin\n"))
date1 = datetime.date(andeb, mdeb, jdeb)
date2 = datetime.date(anfin, mfin, jfin)
if date1 > date2:
insert_date()
else:
return [f"'{andeb}-{mdeb}-{jdeb}'", f"'{anfin}-{mfin}-{jfin}'"]
def insert_expotemp():
cur = conn.cursor()
cur1 = conn.cursor()
nom = input("\nEntrez le nom de l'exposition temporaire à ajouter\n")
date = insert_date()
try:
sql = f"INSERT INTO EXPO_TEMP VALUES ('{nom}', TO_DATE({date[0]}, 'YYYY-MM-DD'), TO_DATE({date[1]}, 'YYYY-MM-DD'));"
cur.execute(sql)
conn.commit()
except psycopg2.IntegrityError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
return
sql = "SELECT IDO, titre from Oeuvre_ext WHERE expo IS NULL"
cur.execute(sql)
raw = cur.fetchone()
if raw:
print('\nParmis les oeuvres extérieures suivantes qui ne sont pas dans une exposition temporaire:')
else:
print('\nAucune oeuvre extérieure est disponible pour cette exposition')
while raw:
print(f"\nIdentifiant de l'oeuvre : {raw[0]}")
print(f' Titre : {raw[1]}\n')
response = int(input(
"Voulez vous ajouter cette oeuvre à l'exposition (Si oui tapez 1, sinon tapez 0)\n"))
if response == 1:
try:
sql1 = f"UPDATE OEUVRE_EXT SET expo = '{nom}' WHERE IDO = '{raw[0]}'"
cur1.execute(sql1)
conn.commit()
except psycopg2.IntegrityError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
raw = cur.fetchone()
def inserer_guide():
cur = conn.cursor()
nom = input("\nEntrez le nom du guide à ajouter\n")
prenom = input("\nEntrez le prénom du guide à ajouter\n")
adresse = input("\nEntrez l'adresse du guide à ajouter\n")
an = int(input("\nEntrez l'année d'embauche du guide à ajouter\n"))
mois = int(input("\nEntrez le mois d'embauche du guide à ajouter\n"))
jour = int(input("\nEntrez le jour d'embauche du guide à ajouter\n"))
try:
sql = f"INSERT INTO Guide (nom, prenom, adresse, date_embauche) VALUES ('{nom}', '{prenom}', '{adresse}', TO_DATE('{an}-{mois}-{jour}', 'YYYY-MM-DD')) RETURNING IDG;"
cur.execute(sql)
res = cur.fetchone()[0]
conn.commit()
except psycopg2.DataError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
return
sql = "SELECT * FROM Expo_perm"
cur.execute(sql)
raw = cur.fetchone()
if raw:
perm = int(input(
'\nVoulez-vous ajouter à ce guide un créneau sur une exposition permanente ? (Tapez 1 si oui, sinon 0)\n'))
if perm == 1:
print('\nLes expositions permanentes sont :')
while raw:
print(f" {raw[0]}")
raw = cur.fetchone()
continu = 1
while continu == 1:
nom = input("\nQuel est le nom de l'exposition permanente ?\n")
jour = input("\nSur quel jour le créneau sera attribué ?\n")
creneau = input(
"\nQuel est le créneau à ajouter ? (9-11, 11-13, 13-15, 15-17)\n")
try:
sql = f"INSERT INTO Affecter_Perm VALUES('{nom}', {res}, '{jour}', '{creneau}')"
cur.execute(sql)
conn.commit()
except psycopg2.DataError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
except psycopg2.IntegrityError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
continu = int(
input('\nVoulez-vous ajouter un autre créneau ? (Tapez 1 si oui, 0 sinon)\n'))
sql = "SELECT nom FROM Expo_temp"
cur.execute(sql)
raw = cur.fetchone()
if raw:
temp = int(input(
'\nVoulez-vous ajouter à ce guide une exposition temporaire ? (Tapez 1 si oui, sinon 0)\n'))
if temp == 1:
print('\nLes expositions temporaires sont :')
while raw:
print(f" {raw[0]}")
raw = cur.fetchone()
nom = input("\nQuel est le nom de l'exposition temporaire ?\n")
try:
sql = f"INSERT INTO Affecter_Temp VALUES ('{nom}', {res});"
cur.execute(sql)
conn.commit()
except psycopg2.DataError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
def main():
cont=0
while cont ==0:
print(conn)
print(conn)
cont = 1
while cont == 1:
menu()
cont=int(input("Continuer 1, si oui"))
cont = int(input("\nTaper 1 si vous voulez continuer, sinon 0\n"))
conn.close()
print(conn)
return 0
def menu():
print("Inserer des donées:")
print("\nListe des requêtes :")
print(" 1. Lister les guides avec leur identification, nom, prénom, et date d'embauche.")
print(" 2. Lister toutes les informations des expositions permanentes.")
print(" 3. Lister toutes les informations des expositions temporaires en cours et futures, ainsi que les identifications et noms des salles qui leur sont attribuées.")
print(" 4. Afficher les identifications des guides participant à une exposition donnée (gérer cas exposition permanente et exposition temporaire).")
print(" 5. Afficher le nombre d'oeuvres et le prix moyen d'acquisition des oeuvres d'une exposition donnée.")
print(" 6. Lister les oeuvres appartenant au Louvre (identification unique, titre, dates et type), triées dans cet ordre par type, par date, par titre.")
print(" 7. Identifier de manière unique les oeuvres actuellement prêtées (pas les prêts passés ni futurs) par le Louvre, avec la date de fin du prêt, triées par date de fin du prêt.")
print(" 8. Afficher le temps moyen des prêts avec chaque musée extérieur, identifié de manière unique et avec leur nom et adresse (groupé par musée).")
print(" 9. Indiquer pour chaque oeuvre (inclure les oeuvres appartenant à des musées extérieurs) : le prix d'acquisition, le nombre de restaurations qu'elle a subi, et le coût cumulé des restaurations.")
print(" 10. Compter le nombre d'oeuvres actuellement absentes (= en prêt ou en restauration), groupées par exposition permanente identifiée de manière unique.")
print(" 11. Identifier de manière unique les oeuvres actuellement empruntées par le Louvre, avec l'identification unique et le titre de l'exposition temporaire où elles sont exposées, avec la date de fin de l'emprunt, triées par date de fin de l'emprunt.")
print(" 12. Afficher les oeuvres ayant été créées à une période donnée, avec toutes leurs informations ainsi que l'identification unique, nom, si elles appartiennent ou non au Louvre, les durées éventuelles des expositions dans lesquelles elles sont/ont été/seront exposées.")
print(" 13. Compter le nombre de créneaux d'attribution de visite d'expositions permanentes par guide (avec toutes les informations des guides, pas de distinction par exposition).")
print(" 14. Compter le nombre d'expositions accueillies par salles, par ordre décroissant, avec la durée cumulée, ainsi que l'affichage de toutes les informations de la salle.")
print("\nInserer des données:")
print(" 20. Insertion d'un nouveau musée")
print(" 21. Insertion oeuvre néolithique")
print(" 22. Creer une nouvelle exposition permanente")
print(" 23. ")
print(" 23. Insertion d'une exposition temporaire et d'oeuvres extérieures exposées")
print(" 24. ")
print(" 25. ")
print(" 26. ")
print("Liste des requêtes :")
print("1. Lister les guides avec leur identification, nom, prénom, et date d'embauche.")
print("2. Lister toutes les informations des expositions permanentes.")
print("3. Lister toutes les informations des expositions temporaires en cours et futures, ainsi que les identifications et noms des salles qui leur sont attribuées.")
print("4. Afficher les identifications des guides participant à une exposition donnée (gérer cas exposition permanente et exposition temporaire).")
print("5. Afficher le nombre d'oeuvres et le prix moyen d'acquisition des oeuvres d'une exposition donnée.")
print("6. Lister les oeuvres appartenant au Louvre (identification unique, titre, dates et type), triées dans cet ordre par type, par date, par titre.")
print("7. Identifier de manière unique les oeuvres actuellement prêtées (pas les prêts passés ni futurs) par le Louvre, avec la date de fin du prêt, triées par date de fin du prêt.")
print("8. Afficher le temps moyen des prêts avec chaque musée extérieur, identifié de manière unique et avec leur nom et adresse (groupé par musée).")
print("9. Indiquer pour chaque oeuvre (inclure les oeuvres appartenant à des musées extérieurs) : le prix d'acquisition, le nombre de restaurations qu'elle a subi, et le coût cumulé des restaurations.")
print("10. Compter le nombre d'oeuvres actuellement absentes (= en prêt ou en restauration), groupées par exposition permanente identifiée de manière unique.")
print("11. Identifier de manière unique les oeuvres actuellement empruntées par le Louvre, avec l'identification unique et le titre de l'exposition temporaire où elles sont exposées, avec la date de fin de l'emprunt, triées par date de fin de l'emprunt.")
print("12. Afficher les oeuvres ayant été créées à une période donnée, avec toutes leurs informations ainsi que l'identification unique, nom, si elles appartiennent ou non au Louvre, les durées éventuelles des expositions dans lesquelles elles sont/ont été/seront exposées.")
print("13. Compter le nombre de créneaux d'attribution de visite d'expositions permanentes par guide (avec toutes les informations des guides, pas de distinction par exposition).")
print("14. Compter le nombre d'expositions accueillies par salles, par ordre décroissant, avec la durée cumulée, ainsi que l'affichage de toutes les informations de la salle.")
choice = int(input("Entrer Votre choix\n"))
print(" 26. Insertion d'un guide et affectation à des expositions")
choice = int(input("\nEntrer Votre choix\n"))
if choice == 1:
liste_guide()
......@@ -272,14 +426,20 @@ def menu():
if choice == 7:
liste_oeuvre_pretees()
if choice == 8:
temp_moyen_pret()
if choice == 9:
informations_oeuvres()
#requettes insertions
if choice == 13:
nb_creneaux()
if choice == 14:
nb_expos()
# requettes insertions
if choice == 20:
inserer_musee()
......@@ -289,6 +449,12 @@ def menu():
if choice == 22:
inserer_expoperm()
if choice == 23:
insert_expotemp()
if choice == 26:
inserer_guide()
if __name__ == '__main__':
main()
......@@ -162,7 +162,7 @@ INSERT INTO Artiste (nom, prenom, naiss, mort) VALUES ('Canova', 'Antonio', TO_D
INSERT INTO Expo_temp VALUES ('Impressionniste', TO_DATE('2021-06-01', 'YYYY-MM-DD'), TO_DATE('2021-12-01', 'YYYY-MM-DD'));
INSERT INTO Expo_temp VALUES ('Cubisme', TO_DATE('2021-12-01', 'YYYY-MM-DD'), TO_DATE('2022-12-01', 'YYYY-MM-DD'));
INSERT INTO Expo_temp VALUES ('Surréalisme', TO_DATE('2021-01-01', 'YYYY-MM-DD'), TO_DATE('2024-01-01', 'YYYY-MM-DD'));
INSERT INTO Expo_perm VALUES ('Femmes');
......@@ -174,8 +174,8 @@ INSERT INTO Musee_ext (nom, adresse, CP, ville) VALUES ('Musée d''Orsay', '62 r
INSERT INTO Oeuvre_ext (titre, dimensions, type, date_crea, auteur, expo) VALUES ('Le penseur', '1.8 x 0.98 x 1.45', 'sculpture', 1880, 1, 'Impressionniste');
INSERT INTO Oeuvre_ext (titre, dimensions, type, date_crea, auteur, expo) VALUES ('Les nymphéas', '0.219 x 0.602', 'peinture', 1920, 3, 'Impressionniste');
INSERT INTO Oeuvre_ext (titre, dimensions, type, date_crea, auteur, expo) VALUES ('Guernica', '0.349 x 0.776', 'peinture', 1937, 4, 'Impressionniste');
INSERT INTO Oeuvre_ext (titre, dimensions, type, date_crea, auteur, expo) VALUES ('trois femmes', '200 × 178 cm', 'peinture', 1908, 4, 'Cubisme');
INSERT INTO Oeuvre_ext (titre, dimensions, type, date_crea, auteur, expo) VALUES ('Trois femmes', '200 × 178 cm', 'peinture', 1908, 4, 'Cubisme');
INSERT INTO Oeuvre_ext (titre, dimensions, type, date_crea, auteur, expo) VALUES ('Guitare', '111 × 63 x 26 cm', 'sculpture', 1924, 4, 'Surréalisme');
INSERT INTO Oeuvre_louvre (titre, dimensions, type, date_crea, auteur, prix_acq, date_acq, expo) VALUES ('La joconde', '0.77 x 0.53', 'peinture', 1510, 2, 10000000, TO_DATE('1990-01-01', 'YYYY-MM-DD'), 'Femmes');
INSERT INTO Oeuvre_louvre (titre, dimensions, type, date_crea, auteur, prix_acq, date_acq) VALUES ('Annonciation', '0.98 x 0.217', 'peinture', 1480, 2, 10000, TO_DATE('2001-04-01', 'YYYY-MM-DD'));
......@@ -183,6 +183,8 @@ INSERT INTO Oeuvre_louvre (titre, dimensions, type, date_crea, auteur, prix_acq,
INSERT INTO Prete VALUES (1, 1, TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2022-01-01', 'YYYY-MM-DD'));
INSERT INTO Prete VALUES (2, 3, TO_DATE('2021-05-01', 'YYYY-MM-DD'), TO_DATE('2024-06-01', 'YYYY-MM-DD'));
INSERT INTO Prete VALUES (3, 2, TO_DATE('2018-01-01', 'YYYY-MM-DD'), TO_DATE('2022-07-01', 'YYYY-MM-DD'));
INSERT INTO Prete VALUES (4, 2, TO_DATE('2021-10-01', 'YYYY-MM-DD'), TO_DATE('2023-01-01', 'YYYY-MM-DD'));
INSERT INTO Prete VALUES (5, 2, TO_DATE('2020-12-01', 'YYYY-MM-DD'), TO_DATE('2024-02-01', 'YYYY-MM-DD'));
INSERT INTO Emprunte VALUES (2, 4, TO_DATE('2020-08-01', 'YYYY-MM-DD'), TO_DATE('2023-01-01', 'YYYY-MM-DD'));
......@@ -202,6 +204,8 @@ INSERT INTO Panneau (salle, description) VALUES (1, 'Nymphéas');
INSERT INTO Panneau (salle, description) VALUES (1, 'Guernica');
INSERT INTO Exposer VALUES (1, 'Impressionniste');
INSERT INTO Exposer VALUES (1, 'Cubisme');
INSERT INTO Exposer VALUES (10, 'Surréalisme');
INSERT INTO Affecter_temp VALUES ('Impressionniste', 1);
......
......@@ -129,10 +129,10 @@ GROUP BY IDG;
14)
Compter le nombre d'expositions accueillies par salles, par ordre décroissant, avec la durée cumulée, ainsi que l'affichage de toutes les informations de la salle.
```
SELECT num, capacite, COUNT(salle), SUM(fin - debut) FROM Salle
SELECT num, capacite, c AS COUNT(salle), SUM(fin - debut) FROM Salle
JOIN Exposer ON Salle.num = Exposer.salle
JOIN Expo_temp ON Exposer.expo = Expo_temp.nom
GROUP BY num;
GROUP BY num ORDER BY c DESC;
```
__Requêtes d'insertion__
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment