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 | ||
restricted:tc-d:tp4:travaux_pratiques_quatrieme_seance_2017 [2017/10/24 11:40] – edauce | restricted:tc-d:tp4:travaux_pratiques_quatrieme_seance_2017 [2018/01/22 14:22] (Version actuelle) – edauce | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | =====TP4===== | ||
+ | Grâce à sqlite, nous pouvons travailler sur une base de données en lecture et en écriture. Cette base constitue la source de données pour le programme. Pour ce TP, nous reprenons la base bibliothèque du [[restricted: | ||
+ | |||
+ | |||
+ | * Créez dans Pycharm un nouveau projet '' | ||
+ | * Téléchargez {{https:// | ||
+ | * Créez un programme principal contenant le code suivant et exécutez-le: | ||
+ | <code python> | ||
+ | import sqlite3 | ||
+ | import os, sys | ||
+ | |||
+ | def connecte_base(db_name): | ||
+ | try: | ||
+ | assert os.path.isfile(db_name) | ||
+ | db = sqlite3.connect(db_name) | ||
+ | print(" | ||
+ | return db | ||
+ | except: | ||
+ | print(" | ||
+ | sys.exit() | ||
+ | |||
+ | db = connecte_base(" | ||
+ | c = db.cursor() | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ====1. Requêtes==== | ||
+ | Testez la requête permettant d’afficher tous les livres de la base et n’afficher que l’auteur et le titre de chaque livre. | ||
+ | Reprenez au choix une des requêtes 8, 9 ou 10 du [[restricted: | ||
+ | |||
+ | Attention. Pensez à lancer vos requêtes à l’aide d’un '' | ||
+ | <code python> | ||
+ | try: | ||
+ | liste_tuples = c.execute(" | ||
+ | for t in liste_tuples: | ||
+ | print(t) | ||
+ | except sqlite3.OperationalError as err: | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | ====2. Classes Membre==== | ||
+ | |||
+ | Les objets de type '' | ||
+ | |||
+ | < | ||
+ | * Nous définissons ici une classe '' | ||
+ | * Pour prendre en compte les emprunts effectués, nous lui ajoutons un attribut '' | ||
+ | </ | ||
+ | |||
+ | Ajoutez dans votre projet un fichier '' | ||
+ | |||
+ | <code python> | ||
+ | class Membre: | ||
+ | def __init__(self, | ||
+ | self.idMembre = idMembre | ||
+ | self.nomMembre = nomMembre | ||
+ | self.adrMembre = adrMembre | ||
+ | self.cpMembre = cpMembre | ||
+ | self.emprunts = [] | ||
+ | | ||
+ | def emprunte(self, | ||
+ | self.emprunts += [idLivre] | ||
+ | </ | ||
+ | |||
+ | Vous devez maintenant tester le bon fonctionnement de cette classe: | ||
+ | * Importez la classe '' | ||
+ | == Création d'un nouveau membre == | ||
+ | * Initialisez un objet '' | ||
+ | * Pour vérifier l' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * Faites-lui emprunter le livre dont le code est ''" | ||
+ | * Pour vérifier l' | ||
+ | * '' | ||
+ | == Lecture de la base == | ||
+ | |||
+ | * Ecrivez une requête qui extrait les informations sur le membre d’identifiant 15. | ||
+ | * Initialisez un objet '' | ||
+ | * Ecrivez une requête qui extrait les identifiants des livres empruntés par le membre d’identifiant 15. | ||
+ | * utilisez la réponse pour compléter la liste '' | ||
+ | * Affichez le contenu de '' | ||
+ | |||
+ | ====3. Classe MembreDAO=== | ||
+ | < | ||
+ | La mise en correspondance entre les objets et les tuples d'un tableau de données s' | ||
+ | * **Création** (// | ||
+ | * **Lecture/ | ||
+ | * **Mise à jour** (// | ||
+ | * **Suppression** (// | ||
+ | |||
+ | Les accesseurs d' | ||
+ | * Les DAO d'une classe A sont des objets servant spécifiquement à interfacer les objets de la classe A avec la base de données | ||
+ | * Ils sont simples d' | ||
+ | </ | ||
+ | |||
+ | Nous créerons ici une classe '' | ||
+ | |||
+ | === 3.1 Constructeur === | ||
+ | Le constructeur prend comme paramètre le nom de la base de données et initialise l' | ||
+ | * Ajoutez un nouveau fichier Python '' | ||
+ | * Recopiez dans ce fichier le code suivant définissant le constructeur de la classe : | ||
+ | <code python> | ||
+ | import sqlite3, os, sys | ||
+ | from membre import Membre | ||
+ | |||
+ | class MembreDAO: | ||
+ | def __init__(self, | ||
+ | try: | ||
+ | assert os.path.isfile(db_name) | ||
+ | db = sqlite3.connect(db_name) | ||
+ | print(" | ||
+ | self.db = db | ||
+ | except: | ||
+ | print(" | ||
+ | sys.exit() | ||
+ | </ | ||
+ | |||
+ | * Testez ce constructeur en créant un objet '' | ||
+ | |||
+ | ===3.2 méthode getMembreById=== | ||
+ | Ajoutez à la classe '' | ||
+ | * prend en paramètre un identifiant entier | ||
+ | * effectue une recherche dans la table **Membre** | ||
+ | * initialise un objet de type Membre avec les informations trouvées | ||
+ | * effectue une recherche des livres empruntés par ce membre dans la table **Emprunts** | ||
+ | * ajoute les livres trouvés dans la liste des emprunts de l' | ||
+ | * retourne l' | ||
+ | |||
+ | <code python> | ||
+ | def getMembreById(self, | ||
+ | ... | ||
+ | </ | ||
+ | <note important> | ||
+ | Attention, pensez à gérer le cas où le numéro fourni n’est pas présent dans la base | ||
+ | </ | ||
+ | |||
+ | * Dans le programme principal, utilisez l' | ||
+ | * '' | ||
+ | * Affichez ensuite le contenu de '' | ||
+ | |||
+ | |||
+ | ===3.3 méthode createMembre=== | ||
+ | La méthode '' | ||
+ | * prend en paramètre un objet de type Membre | ||
+ | * effectue une requête d' | ||
+ | * ainsi qu'une requête d' | ||
+ | <code python> | ||
+ | def createMembre(self, | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | <note tip> | ||
+ | La commande d' | ||
+ | <code python> | ||
+ | c.execute(" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | * Il est important de vérifier que l' | ||
+ | * Pour que les modifications soient prises en compte, il faut ajouter la commande suivante : | ||
+ | <code python> | ||
+ | self.db.commit() | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Testez cette fonction dans le programme principal utilisant le membre que vous avez créé à la question 2 (pensez à lui attribuer un identifiant vierge, par exemple 31). | ||
+ | |||
+ | Si tout se passe bien, rien ne s' | ||
+ | |||
+ | ===3.4 Méthode deleteMembre === | ||
+ | |||
+ | Définissez une méthode '' |