Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
public:appro-s7:tda1 [2019/11/11 21:25] – edauce | public:appro-s7:tda1 [2023/10/17 22:44] (Version actuelle) – edauce | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ==== TD4 : Création d'un schéma de données ==== | ||
+ | |||
+ | * Le but est maintenant de définir un modèle ORM pour le schéma de données du [[public: | ||
+ | |||
+ | * La première étape consiste à définir le modèle de données. Pour conserver les données de l' | ||
+ | <note tip> | ||
+ | On part du schéma entité/ | ||
+ | |||
+ | {{: | ||
+ | </ | ||
+ | A FAIRE : | ||
+ | * définissez le schéma relationnel correspondant (sans oublier les clés étrangères) | ||
+ | * traduisez le schéma relationnel en schéma UML | ||
+ | * Ajoutez le nouveau script '' | ||
+ | <code python> | ||
+ | from pony import orm | ||
+ | |||
+ | db = orm.Database() | ||
+ | |||
+ | class Equipement(db.Entity): | ||
+ | ... | ||
+ | | ||
+ | class Animal(db.Entity): | ||
+ | ... | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | * Vous devez maintenant remplir la base à l'aide des données contenues dans {{http:// | ||
+ | <code python> | ||
+ | import json | ||
+ | |||
+ | from pony import orm | ||
+ | from data_model import Equipement, Animal, db | ||
+ | |||
+ | db.bind(provider=' | ||
+ | db.generate_mapping(create_tables=True) | ||
+ | |||
+ | équipement_data = ' | ||
+ | with open(équipement_data, | ||
+ | équipement_dict = json.load(f) | ||
+ | for id_équip in équipement_dict: | ||
+ | disponibilité = équipement_dict[id_équip][" | ||
+ | with orm.db_session: | ||
+ | try: | ||
+ | Equipement(id_équip=id_équip, | ||
+ | orm.commit() | ||
+ | except: | ||
+ | print(id_équip, | ||
+ | pass | ||
+ | |||
+ | |||
+ | animal_data = ' | ||
+ | with open(animal_data, | ||
+ | animal_dict = json.load(f) | ||
+ | for id_animal in animal_dict: | ||
+ | état = animal_dict[id_animal][" | ||
+ | type = animal_dict[id_animal][" | ||
+ | race = animal_dict[id_animal][" | ||
+ | lieu = animal_dict[id_animal][" | ||
+ | with orm.db_session: | ||
+ | try: | ||
+ | Animal(id_animal=id_animal, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | orm.commit() | ||
+ | except: | ||
+ | print(id_animal, | ||
+ | pass | ||
+ | </ | ||
+ | * Vous disposez maintenant d'une base de données '' | ||
+ | |||
+ | Voici à quoi doit ressembler le début de '' | ||
+ | <code python> | ||
+ | from pony import orm | ||
+ | from data_model import Equipement, Animal, db | ||
+ | |||
+ | liste_états = [' | ||
+ | |||
+ | db.bind(provider=' | ||
+ | db.generate_mapping() | ||
+ | |||
+ | def lit_état(id_animal): | ||
+ | with orm.db_session: | ||
+ | try: | ||
+ | return Animal[id_animal].état | ||
+ | except: | ||
+ | return None | ||
+ | |||
+ | def lit_lieu(id_animal): | ||
+ | with orm.db_session: | ||
+ | try: | ||
+ | return Animal[id_animal].lieu | ||
+ | except: | ||
+ | return None | ||
+ | |||
+ | def vérifie_disponibilité(id_équipement): | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Complétez le code de manière à valider le fichier de tests suivant : | ||
+ | |||
+ | <code python> | ||
+ | import modele | ||
+ | import controleur | ||
+ | from data_model import orm, Equipement, Animal | ||
+ | |||
+ | def test_lit_etat(): | ||
+ | assert modele.lit_état(' | ||
+ | assert modele.lit_état(' | ||
+ | |||
+ | @orm.db_session | ||
+ | def test_lit_lieu(): | ||
+ | assert modele.lit_lieu(' | ||
+ | assert modele.lit_lieu(' | ||
+ | |||
+ | def test_vérifie_disponibilité(): | ||
+ | assert modele.vérifie_disponibilité(' | ||
+ | assert modele.vérifie_disponibilité(' | ||
+ | assert modele.vérifie_disponibilité(' | ||
+ | |||
+ | @orm.db_session | ||
+ | def test_cherche_occupant(): | ||
+ | assert Animal[' | ||
+ | assert Animal[' | ||
+ | assert Animal[' | ||
+ | assert modele.cherche_occupant(' | ||
+ | |||
+ | def test_change_état(): | ||
+ | modele.change_état(' | ||
+ | assert modele.lit_état(' | ||
+ | modele.change_état(' | ||
+ | assert modele.lit_état(' | ||
+ | modele.change_état(' | ||
+ | assert modele.lit_état(' | ||
+ | |||
+ | @orm.db_session | ||
+ | def test_change_lieu(): | ||
+ | modele.change_lieu(' | ||
+ | assert modele.lit_lieu(' | ||
+ | modele.change_lieu(' | ||
+ | assert modele.lit_lieu(' | ||
+ | modele.change_lieu(' | ||
+ | assert modele.lit_lieu(' | ||
+ | modele.change_lieu(' | ||
+ | assert modele.lit_lieu(' | ||
+ | |||
+ | |||
+ | |||
+ | @orm.db_session | ||
+ | def test_nourrir(): | ||
+ | if modele.vérifie_disponibilité(' | ||
+ | controleur.nourrir(' | ||
+ | assert modele.vérifie_disponibilité(' | ||
+ | assert modele.lit_état(' | ||
+ | assert modele.lit_lieu(' | ||
+ | controleur.nourrir(' | ||
+ | assert modele.lit_état(' | ||
+ | assert modele.lit_lieu(' | ||
+ | controleur.nourrir(' | ||
+ | assert modele.lit_état(' | ||
+ | assert modele.lit_lieu(' | ||
+ | controleur.nourrir(' | ||
+ | assert modele.lit_état(' | ||
+ | assert modele.lit_lieu(' | ||
+ | assert modele.vérifie_disponibilité(' | ||
+ | |||
+ | </ | ||
+ | |||
+ | Vérifiez également que votre programme fonctionne correctement avec l' | ||