View
32
Download
3
Category
Preview:
Citation preview
Python: Manipulation d’Informations
02/05/2013
Sommaire
1. Introduction
2. Bases de données
3. Systèmes de gestion de bases de données
4. Grammaire SQL
5. Python et les bases de données : le module « SQLite »
6. Stockage d'objets : le module « Pickle »
7. 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)
02/05/2013 Manipulation d'Informations 8
PRODUIT(NUMERO PRODUIT, NOM PRODUIT, QUANTITE STOCKEE)
Nom relation Attribut clé (souligné) Attributs non clé
Opérateurs Relationnels
L’algèbre relationnel : 2 types d’opérateurs
• les opérateurs unaires qui portent sur UNE relation
• … binaires … DEUX relations
02/05/2013 Manipulation d'Informations 9
Les opérateurs unaires (sur une table)
Sélection
Projection
Complément
Les opérateurs binaires (sur deux tables)
Union
Intersection
Différence
Division
Produits
Opérateurs Relationnels Unaires
02/05/2013 Manipulation d'Informations 10
• 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
Opérateurs Relationnels Binaires
02/05/2013 Manipulation d'Informations 11
• 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
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 Projection
[WHERE condition]; Sélection
• Insertion d’enregistrements :
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
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
02/05/2013 Manipulation d'Informations 15
numériques de comparaison spécifiques
Opérateurs + - * / !=, >, >=, <, <= IN,NOT IN IS [NOT] NULL BETWEEN, LIKE (%)
Jointure Naturelle
02/05/2013 Manipulation d'Informations 16
• 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)
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 Manipulation d'Informations 17
Types SQLite Types Python
NULL None
INTEGER int, long
REAL float
TEXT str, unicode
BLOB buffer
Exercice:
02/05/2013 Manipulation d'Informations 18
4-SQLite_exo1.txt
Exercice: 4-SQLite_exo1.txt
02/05/2013 Manipulation d'Informations 19
1. Lancer sqlite3
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
http://www.sqlite.org/download.html
Precompiled Binaires > command-line shell
$ sqlite3
SQLite version 3.7.9 2011-11-01 00:52:41
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
02/05/2013 Manipulation d'Informations 20
Programme Python
SGBD
API / Driver
SQL
Base de Données
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 Manipulation d'Informations 22
5/SQLite_Python.py
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 Manipulation d'Informations 24
5/SQLite_Python.py
2. Objets Persistents
Etape A
02/05/2013 Manipulation d'Informations 26
• Objets “conservés” entre deux exécutions
stockage consultation
Etape B
• Pickle
Pickle
pickle
.dump(obj,file)
.load(file)
02/05/2013 Manipulation d'Informations 27
Sérialisation “pickling” (dump)
Dé-sérialisation “unpickling” (load)
flux de bytes (e.g., stocké dans un fichier)
objet “live”
Pickle: Problèmes courants
02/05/2013 Manipulation d'Informations 28
• 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()
Exercice: Pickle
02/05/2013 Manipulation d'Informations 29
1. pickle_ex.py
3. Copy vs Deepcopy
02/05/2013 Manipulation d'Informations 30
copy. x: objet
.copy(x) “shallow copy”
p copie x et insère des références aux originaux, si possible
.deepcopy(x)
“deep copy”
copie récursive de tous les sous-objets
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
02/05/2013 Manipulation d'Informations 31
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)
Exercice: DeepCopy
02/05/2013 Manipulation d'Informations 32
1. copy_vs_deepcopy.py
2. Supplémentaire : deepcopy_advanced.py
8.Exercices supplémentaires
02/05/2013 Manipulation d'Informations 34
Recommended