2-Manipulation d Informations

publicité
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
Téléchargement