Python: Manipulation d’Informations · 1. Introduction 2. Bases de données 3. Systèmes de...

32
Python: Manipulation d’Informations 02/05/2013

Transcript of Python: Manipulation d’Informations · 1. Introduction 2. Bases de données 3. Systèmes de...

Page 1: Python: Manipulation d’Informations · 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

Python: Manipulation d’Informations

02/05/2013

Page 2: Python: Manipulation d’Informations · 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

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

Page 3: Python: Manipulation d’Informations · 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

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

Page 4: Python: Manipulation d’Informations · 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

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

Page 5: Python: Manipulation d’Informations · 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

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

Page 6: Python: Manipulation d’Informations · 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

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

Page 7: Python: Manipulation d’Informations · 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

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

Page 8: Python: Manipulation d’Informations · 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

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é

Page 9: Python: Manipulation d’Informations · 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

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

Page 10: Python: Manipulation d’Informations · 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

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

Page 11: Python: Manipulation d’Informations · 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

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

Page 12: Python: Manipulation d’Informations · 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

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

Page 13: Python: Manipulation d’Informations · 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

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

Page 14: Python: Manipulation d’Informations · 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

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

Page 15: Python: Manipulation d’Informations · 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

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 (%)

Page 16: Python: Manipulation d’Informations · 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

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)

Page 17: Python: Manipulation d’Informations · 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

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

Page 18: Python: Manipulation d’Informations · 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

Exercice:

02/05/2013 Manipulation d'Informations 18

4-SQLite_exo1.txt

Page 19: Python: Manipulation d’Informations · 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

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

Page 20: Python: Manipulation d’Informations · 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

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

Page 21: Python: Manipulation d’Informations · 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

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

Page 22: Python: Manipulation d’Informations · 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

Exercice:

02/05/2013 Manipulation d'Informations 22

5/SQLite_Python.py

Page 23: Python: Manipulation d’Informations · 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

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

Page 24: Python: Manipulation d’Informations · 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

Exercice:

02/05/2013 Manipulation d'Informations 24

5/SQLite_Python.py

Page 25: Python: Manipulation d’Informations · 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

2. Objets Persistents

Etape A

02/05/2013 Manipulation d'Informations 26

• Objets “conservés” entre deux exécutions

stockage consultation

Etape B

• Pickle

Page 26: Python: Manipulation d’Informations · 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

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”

Page 27: Python: Manipulation d’Informations · 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

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()

Page 28: Python: Manipulation d’Informations · 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

Exercice: Pickle

02/05/2013 Manipulation d'Informations 29

1. pickle_ex.py

Page 29: Python: Manipulation d’Informations · 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

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

Page 30: Python: Manipulation d’Informations · 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

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)

Page 31: Python: Manipulation d’Informations · 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

Exercice: DeepCopy

02/05/2013 Manipulation d'Informations 32

1. copy_vs_deepcopy.py

2. Supplémentaire : deepcopy_advanced.py

Page 32: Python: Manipulation d’Informations · 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

8.Exercices supplémentaires

02/05/2013 Manipulation d'Informations 34