DUT en Statistique et Informatique Décisionnelle, Université de la Côte d'Azur

Cours de Bases de données avancées 2018/19

Enseignant: prof. Malchiodi (Università degli Studi di Milano)

TP: accès à bases de données

  1. Lancer MAMP et noter le port du serveur mySQL
  2. Acceder à mySQL et vérifier que l'usager superheroadmin que nous avons crée dans le premier TP est encore existant; vérifiez aussi de connaître son mot de passe (si vous l'avez oublié, vous pouvez le changer en accedant tant que usager root). Verifier aussi que la base de données superheroes existe.
  3. Lancer jupyter et vérifier que mysql.connector soit installé (il suffit d'exécuter import mysql.connector as mysql et vérifier si ça déclenche une erreur). S'il le faut, installer le module en exécutant conda install -c anaconda mysql-connector-python dans Anaconda prompt.
  4. Toujours dans jupyter, se connecter à la base de données superheroes.
  5. Extraire toutes les lignes de la table heroes et les afficher. Vérifier que les résultats sont les mêmes que l'on obtient en utilisant directement mySQL.
  6. Écrire une query parametrisée qui permet d'ajouter une ligne à la table heroes, et ajouter la ligne suivante (ou une équivalente si elle existe déjà dans la BD):
    1, 'Wonder Woman', 'Diana Prince', 'Themyscira', 'DC Comics', 183.13, 74.74, 'F', 1941, 'Blue', 'Black', 100, 'high'
  7. S'assurer de lancer une commit sur la base de données, et après vérifier que la ligne ajoutée ait étée ajoutée à la base.
  8. Utiliser la query parametrisée pour ajouter avec une seule instruction les lignes suivantes à la table heroes:
    3, 'Wolverine', 'Logan', 'Alberta, Canada', 'Marvel Comics', 160.70, 135.21, 'M', None, 'Blue', 'Black', 35, 'good'
    4, 'Spider-Man', 'Peter Parker', 'New York, New York', 'Marvel Comics', 178.28, 74.25, 'M', None, 'Hazel', 'Brown', 55, 'high'
    5, 'Professor X', 'Charles Francis Xavier', 'New York, New York', 'Marvel Comics', 183.74, 86.89, 'M', 1963, 'Blue', 'No Hair', 10, 'high'
  9. Exécuter une query de selection qui extrait un sous-ensemble d'attributes de la table heroes.
  10. Exécuter une query de selection qui contient une clause WHERE.
  11. Télécharger le fichier CSV qui contient la description d'un ensemble de superhéros. Lire ce fichier et créer une liste avec ses contenus, prenant soin de ne pas considérer la première ligne (car elle contient les noms des colonnes).
  12. Écrire une fonction exists_in_db qui vérifie si dans la table heros il y a une ligne dont l'attribut name a par valeur l'argument passé à cette fonction, en retournant une valeur booléenne selon le cas.
  13. Écrire une fonction next_id qui retourne un ID pour une nouvelle ligne de la table heroes (il suffit de déterminer la valeur de l'ID le plus haut et de lui ajouter 1).
  14. Écrire des fonctions qui transforment les valeurs lit du fichier CSV en expressions du type correcte pour les attributs de la table heroes (il faudra avoir une fonction pour le type entier, une pour le type réel et une pour les chaînes, si possible aussi tenant compte d'une longeur maximale).
  15. Utiliser les fonctions créées aux points précédents pour ajouter à la table heroes tous les données lits du fichier CSV, au cas où ils ne soient déjà contenus dans la table.
  16. La procédure décrite au point précédent va déclencher une erreur, car en python les chaînes sont encodées en utilisant un format différent de celui de mySQL. Il faudra donc modifier la fonction qui traite les chaînes afin de les convertir en ASCII: ça peut être fait sur la chaîne s en invocant s.encode('ascii', 'ignore').
  17. Vérifier que sqlalchemy soit installé, et s'il le faut l'installer en exécutant conda install -c anaconda sqlalchemy dans Anaconda prompt. Se connecter avec create_engine à la BD et créer un DataFrame de pandas qui contient toutes les lignes de la table heroes, en utilisant la méthode read_sql.