Python: Manipulation d’Informations 02/05/2013 Sommaire 1. 2. 3. 4. 5. 6. 7. Introduction Bases de données Systèmes de gestion de bases de données Grammaire SQL Python et les bases de données : le module « SQLite » Stockage d'objets : le module « Pickle » Copie d'informations : le module « copy » 02/05/2013 Manipulation d'Informations 2 1. Introduction Calculs importants: – Grande masse de données (Google : 24 Po/j en 2009) – Stockage dans une mémoire secondaire (disque, réseau, cloud) – Lecture/manipulation facile d’informations – Longévité des données (plusieurs dizaines d'années) => Bases de données 02/05/2013 Manipulation d'Informations 3 2. Bases de Données • • • • • Ensemble de données informatisées Multiple utilisateurs Organisée selon un modèle de données Stockées dans une mémoire SGBD : Logiciel de gestion de BD (mémorisation/manipulation) 02/05/2013 Manipulation d'Informations 4 3. Système de Gestion de Bases de Données • SGBD : Créer, manipuler, interroger une BD • Fonctionnalités : – Partage des données (accès concurrent) – Manipulation des données – Contrôle de la redondance – Optimisation des accès aux données (requêtes SQL) – Confidentialité des données (droits & modes d’accès) – Intégrité des données (cohérence) 02/05/2013 Manipulation d'Informations 5 Les SGBD relationnels • • • • • • • SGBD relationnels : fondés sur le modèle relationnel Modèle relationnel : décrit une BD relationnelle (BDR) BDR : ensemble de relations (tables) Relation : ensemble d’attributs (colonnes) Ligne : enregistrement (occurrence) de données Une relation est identifiée par une clé primaire Basé sur l’algèbre relationnelle 02/05/2013 Manipulation d'Informations 6 Clé primaire – Clé étrangère (contraintes d’intégrité référentielle) • Clé primaire : identifie de façon unique chaque occurrence = attribut (ou ensemble d’attributs) dont deux occurrences différentes ne prennent pas la même valeur • Clé étrangère : attribut d’une table permettant de la relier à une autre table via sa clé primaire => Utiliser une clé primaire d’une table A dans une table B Employé(NumEmp, NomEmp, AdrEmp, NumSer) Service(NumSer, LibelléSer, LocalisationSer) 02/05/2013 Manipulation d'Informations 7 Schéma d’une Relation (table) PRODUIT(NUMERO PRODUIT, NOM PRODUIT, QUANTITE STOCKEE) Nom relation 02/05/2013 Attribut clé (souligné) Manipulation d'Informations Attributs non clé 8 Opérateurs Relationnels L’algèbre relationnel : 2 types d’opérateurs • les opérateurs unaires qui portent sur UNE relation • … binaires … DEUX relations Les opérateurs binaires (sur deux tables) Les opérateurs unaires (sur une table) 02/05/2013 Union Intersection Sélection Différence Projection Division Complément Produits Manipulation d'Informations 9 Opérateurs Relationnels Unaires • • Sélection (Select (R,E) ou σ(E)R) = supprimer des occurrences de la relation R qui ne satisfont pas l'expression de la sélection E Projection (Proj Y(R) ou πY(R)) = supprimer le sous-ensemble Y d'attributs d’une relation 1/ Sélection des commandes passées après octobre 2/ Projection sur la colonne Date 02/05/2013 Manipulation d'Informations 10 Opérateurs Relationnels Binaires • • Union = la fusion de 2 relations ayant les mêmes attributs Intersection = fournit les occurrences présentent dans les 2 relations ayant les mêmes attributs 02/05/2013 Manipulation d'Informations 11 Langage de Requêtes SQL • • • • Langage standard pour les SGBD relationnels Un langage structuré de requêtes : définition, interrogation, manipulation de données Langage de définition de données LDD: création, modification ou suppression des objets (requêtes CREATE, ALTER, DROP) Langage de manipulation de données LMD: extraction, ajout, mise à jour, suppression d’enregistrements (requêtes SELECT, INSERT, UPDATE, DELETE) 02/05/2013 Manipulation d'Informations 12 SQL: Définition de Données • Création d’une table : CREATE TABLE nom(<col> <type>, <col> <type>PRIMARY KEY (<col>)); • Modification de la table : ALTER TABLE nom [alter spécifications] - Ajouter une colonne : ADD <colonne> <type> ; • – La supprimer : DROP <colonne> ; – La renommer : CHANGE <ancien_nom> <nouveau> <type> ; – Changer son type de données : MODIFY <colonne>< nouveau_type>; Suppression d’une table : DROP TABLE nom de table ; 02/05/2013 Manipulation d'Informations 13 SQL: Manipulation de Données • Sélection & projection : • SELECT nom colonne FROM table [WHERE condition]; Insertion d’enregistrements : Projection Sélection • INSERT INTO table(col1, col2) VALUES (valeur1, valeur1) ; Suppression d’enregistrements : DELETE FROM table WHERE condition; • Mise à jour de la table : UPDATE table SET colonne = valeur WHERE condition ; 02/05/2013 Manipulation d'Informations 14 SQL: conditions et fonctions arithmétiques Condition : <opérande><opérateur><opérande> Opérandes : colonne, valeur (num, alphanum, date), expression (arithmétique (+ - * /) ou fonctions numériques Opérateurs 02/05/2013 +-*/ de comparaison !=, >, >=, <, <= spécifiques IN,NOT IN IS [NOT] NULL BETWEEN, LIKE (%) SUM(n): somme des valeurs de n AVG(n) : moyenne des valeurs de n (hors valeurs nulles) COUNT(*) : nombre d’enregistrements renvoyés par la requête MAX(n) (MIN(n)): valeur maximum (ou minimum) de n Manipulation d'Informations 15 Jointure Naturelle • Les informations dont nous avons besoin se trouvent dans plusieurs tables? La jointure naturelle : met en relation deux (ou plus) tables => combiner les colonnes de plusieurs tables SELECT * FROM table1, table2 WHERE table1.colonne = table2.colonne; Employé(NumEmp, NomEmp, AdrEmp, NumSer) Service(NumSer, LibelléSer, LocalisationSer) 02/05/2013 Manipulation d'Informations 16 Exemple de SGBD Relationnel: SQLite • Bibliothèque logicielle implémentant un moteur de BDR accessible par SQL • SQLite stocke les données dans des fichiers • Les types supportés : 02/05/2013 Types SQLite Types Python NULL None INTEGER int, long REAL float TEXT str, unicode BLOB buffer Manipulation d'Informations 17 Exercice: 02/05/2013 4-SQLite_exo1.txt Manipulation d'Informations 18 Exercice: 4-SQLite_exo1.txt 1. Lancer sqlite3 http://www.sqlite.org/download.html Precompiled Binaires > command-line shell $ sqlite3 SQLite version 3.7.9 2011-11-01 00:52:41 2. Afficher le nom des tables présentes dans physics.db 3. Créer la table « Etudiant » ayant pour attributs : NumEtu, NomEtu, AdrEtu 4. Insérer des enregistrements 5. Afficher le contenu de la table 6. Interroger la base de données 7. Supprimer la table 02/05/2013 Manipulation d'Informations 19 Python et Bases de Données: Architecture Créer, manipuler, interroger une BD à l'aide d'un programme écrit en python Exemple : Effectuer des calculs automatiques importants sur les données d'une BD et stocker les résultats dans la même BD Programme API / Python Driver 02/05/2013 SQL Manipulation d'Informations SGBD Base de Données 20 SQLite et Python 1) Importer le module & se connecter à la BD import sqlite3 conn=sqlite3.connect('example.db') 2) Créer un curseur afin d'exécuter des requêtes SQL c = conn.cursor() 3) Passer en argument les requêtes à la méthode execute de l'objet cursor c.execute("requête SQL") c.executemany("requête SQL") 02/05/2013 Manipulation d'Informations 21 Exercice: 02/05/2013 5/SQLite_Python.py Manipulation d'Informations 22 SQLite et Python 4) Afficher le résultats d'une requête SQL • Fetchone() : résultat récupéré en une ligne unique (tuple) • Fetchmany(n) : récupère les n prochains résultats (liste) • Fetchall() : récupère toutes les lignes de résultat de la requete (liste) 5) Validation de modifications conn.commit() 6) Annulation des dernières modifications conn.rollback() 7) Fermer la connexion conn.close() 02/05/2013 Manipulation d'Informations 23 Exercice: 02/05/2013 5/SQLite_Python.py Manipulation d'Informations 24 2. Objets Persistents • Objets “conservés” entre deux exécutions Etape A Etape B stockage consultation • Pickle 02/05/2013 Manipulation d'Informations 26 Pickle objet “live” Sérialisation “pickling” (dump) Dé-sérialisation “unpickling” (load) flux de bytes (e.g., stocké dans un fichier) pickle .dump(obj,file) .load(file) 02/05/2013 Manipulation d'Informations 27 Pickle: Problèmes courants • Dé-synchronisation: – Attributs supplémentaires utilisés dans une méthode, mais non présents dans l’objet sauvegardé! • Limite de récursion: RuntimeError: maximum recursion depth exceeded Augmenter dynamiquement la profondeur maximale sys.setrecursionlimit() 02/05/2013 Manipulation d'Informations 28 Exercice: Pickle 1. pickle_ex.py 02/05/2013 Manipulation d'Informations 29 3. Copy vs Deepcopy copy. x: objet .copy(x) “shallow p copie x et insère des références aux originaux, si copy” possible .deepcopy( x) 02/05/2013 “deep copy” copie récursive de tous les sous-objets Manipulation d'Informations 30 Deepcopy: problèmes potentiels ? • Self-Références (in)directes: – Boucle récursives • Duplication de structures qui devraient être partagées: – État non cohérent Problèmes évités par: - “mémo” d’objets déjà copiés - développeur peut définir ses propres fonction x.__copy__(self) et x.__deepcopy__(self) 02/05/2013 Manipulation d'Informations 31 Exercice: DeepCopy 1. copy_vs_deepcopy.py 2. Supplémentaire : deepcopy_advanced.py 02/05/2013 Manipulation d'Informations 32 8.Exercices supplémentaires 02/05/2013 Manipulation d'Informations 34