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 | ||
| tc_info:tp10 [2019/01/13 17:38] – edauce | tc_info:tp10 [2019/01/17 09:31] (Version actuelle) – [4. Dictionnaire employe] edauce | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ======TP 10 : Persistance des données====== | ||
| + | |||
| + | De nombreux programmes utilisent des données situées sur une base de données séparée du programme lui-même. Le programme qui effectue les requêtes est appelé le “client”, | ||
| + | |||
| + | Le but de ce TP est d’écrire un programme client (en Python) qui se connecte à une base de données et affiche le résultat de quelques requêtes. | ||
| + | |||
| + | ====1. Lecture de la base==== | ||
| + | |||
| + | Nous travaillerons sur la base '' | ||
| + | |||
| + | <note tip> | ||
| + | Les employés sont décrits par les attributs : | ||
| + | |||
| + | **Employee** (employee_id, | ||
| + | |||
| + | **Employé**(id_employé, | ||
| + | )) | ||
| + | </ | ||
| + | |||
| + | Téléchargez {{https:// | ||
| + | |||
| + | sqlite3 foodmart.db | ||
| + | |||
| + | La base contient 2 tables : '' | ||
| + | |||
| + | tapez par exemple : | ||
| + | .schema employee | ||
| + | Vous voyez apparaître les commandes sql qui définissent la structure de la table. | ||
| + | tapez ensuite : | ||
| + | <code sql> | ||
| + | SELECT * FROM employee; | ||
| + | </ | ||
| + | la liste de employés s’affiche. | ||
| + | |||
| + | ==Testez les requêtes suivantes dans la base : == | ||
| + | Par exemple : | ||
| + | * Donner le nombre total d’employés | ||
| + | * Donner le nombre d’employés et le salaire moyen par magasin | ||
| + | * Donner les salaires min et max et moyen par catégorie managériale | ||
| + | * Donner la liste des magasins employant plus de 30 employés | ||
| + | * Donner l' | ||
| + | * Donner le nom du superviseur D'Ana Quick | ||
| + | * Donner le nom complet, la fonction et la catégorie managériale des employés supervisant plus de 5 employés | ||
| + | * Donner le nom complet, la fonction et la catégorie managériale des 10 employés ayant les plus hauts salaires | ||
| + | etc... | ||
| + | |||
| + | ====2. Création d’un nouveau projet Python==== | ||
| + | |||
| + | Le TP sera réalisé en Python. Lancez le programme Pycharm et créez un nouveau projet. | ||
| + | |||
| + | Nous utiliserons comme dans le TP précédent la librairie sqlite3 dont les fonctionnalités permettent d’envoyer des requêtes vers un serveur de bases de données. | ||
| + | |||
| + | Commencez par importer la librairie mentionnée : | ||
| + | <code python> | ||
| + | import sqlite3 | ||
| + | </ | ||
| + | Déplacez le fichier '' | ||
| + | |||
| + | 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(" | ||
| + | </ | ||
| + | |||
| + | Pour pouvoir exécuter des requêtes dans la base, il faut créer un " | ||
| + | <code python> | ||
| + | c = db.cursor() | ||
| + | </ | ||
| + | |||
| + | Vous pouvez maintenant exécuter des requêtes à l'aide de ce curseur: | ||
| + | | ||
| + | Il est conseillé d' | ||
| + | |||
| + | <code python> | ||
| + | try: | ||
| + | c.execute(" | ||
| + | except sqlite3.OperationalError as e: | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | Une fois la requête exécutée sans erreur, les réponses sont disponibles à l'aide de la commande '' | ||
| + | <code python> | ||
| + | liste_tuples = c.fetchall() | ||
| + | for t in liste_tuples: | ||
| + | print(t) | ||
| + | </ | ||
| + | |||
| + | Exécutez le programme et vérifiez qu’il n’y a pas d’erreur (la liste des clients s' | ||
| + | |||
| + | ====3. Premières requêtes==== | ||
| + | |||
| + | Le but de ce TP est d’écrire un programme capable de récupérer des informations de la table “employee”, | ||
| + | |||
| + | Recopiez maintenant le code suivant (remplace le code précédent): | ||
| + | |||
| + | <code python> | ||
| + | db = connecte_base(" | ||
| + | c = db.cursor() | ||
| + | try: | ||
| + | c.execute(" | ||
| + | liste_tuples = c.fetchall() | ||
| + | for t in liste_tuples: | ||
| + | num_employe = t[0] | ||
| + | nom = t[1] | ||
| + | print(num_employe , nom) | ||
| + | except sqlite3.OperationalError as e: | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | **Explications** : | ||
| + | |||
| + | L’objet '' | ||
| + | * L’objet '' | ||
| + | * L’opération '' | ||
| + | * L’opération '' | ||
| + | * Pour afficher tout ou partie des réponses, il suffit parcourir les éléments de '' | ||
| + | |||
| + | |||
| + | <code python> | ||
| + | for t in liste_tuples: | ||
| + | … | ||
| + | </ | ||
| + | </ | ||
| + | Testez cette requête ainsi que les requêtes suivantes : | ||
| + | |||
| + | **3.1** - Comptez et affichez le nom, le prénom et le salaire des employés qui gagnent plus de 10000 dollars. | ||
| + | |||
| + | **3.2** - Comptez et affichez le nom complet (full_name), | ||
| + | |||
| + | ====4. Dictionnaire employe==== | ||
| + | |||
| + | Nous définissons ici un dictionnaire '' | ||
| + | * ''" | ||
| + | * ''" | ||
| + | * ''" | ||
| + | * ''" | ||
| + | |||
| + | Ajoutez dans votre projet une fonction d' | ||
| + | |||
| + | <code python> | ||
| + | def init_employe(nom_complet, | ||
| + | e = {} | ||
| + | e[" | ||
| + | e[" | ||
| + | e[" | ||
| + | e[" | ||
| + | return e | ||
| + | </ | ||
| + | |||
| + | |||
| + | **4.1** - Testez cette fonction dans le programme principal: | ||
| + | |||
| + | * initialisez une variable '' | ||
| + | <note tip> | ||
| + | Apres initialisation, | ||
| + | </ | ||
| + | * Affichez ensuite les valeurs contenues dans la variable . | ||
| + | |||
| + | **4.2** - Définissez selon ce principe une liste contenant les employés supervisés par Mona Jaramillo. | ||
| + | |||
| + | **4.3** - Ecrivez une fonction '' | ||
| + | |||
| + | **4.3** - Affichez dans le programme principal le nom complet du mieux payé des employés de Mona Jaramillo. | ||
| + | |||
| + | ====5. Dictionnaire departement==== | ||
| + | |||
| + | Définir un dictionnaire '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * définir un une fonction permettant d' | ||
| + | * définir une fonction '' | ||
| + | |||
| + | **5.1** - Affichez le contenu de la table '' | ||
| + | |||
| + | **5.2** - Au niveau du programme principal, créez puis remplissez une liste de départements à partir de la table '' | ||
| + | |||
| + | **5.3** - Définir une méthode '' | ||
| + | |||
| + | **5.4** - Définir une méthode '' | ||