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:58] – [4. Dictionnaire Employe] 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 '' | ||