SlideShare une entreprise Scribd logo
1  sur  7
Télécharger pour lire hors ligne
08/07/13

Python et la persistance de données — InitiationPython 1.5.1 documentation

Python et la persistance de données
Fichiers DBM
Description et utilisation
Le module a y b [1] offre une solution pour des besoins simples de persistance en utilisant
ndm
des fichiers plats. Il propose une solution standard indépendante de l’implémentation. Un
fichier DBM s’utilise comme un dictionnaire, donc relativement simplement, seul
l’initialisation est différente (ouverture du fichier). Les données sont manipulées comme des
chaînes et accessibles à l’aide de clés.
La fonction o e ( a e
pnnm,
n’existe pas»).

''
c)

ouvre le fichier nommé

n m (' '
ae c

signifie «en le créant s’il

>>ipr ayb
> mot ndm
>>dmie=ayb.pn'lba,''
> bfl
ndmoe(bal' c)

La fonction c o e ) ferme le fichier (requis ou non selon les implémentations, pour être sûr
ls(
que les données sont sauvées il vaut mieux utiliser explicitement c o e
l s ).
>>dmiecoe)
> bfl.ls(

La lecture et l’écriture se fait comme dans un dictionnaire, mais les clés sont
obligatoirement des chaînes. L’exemple suivant crée deux entrées ( f o et b r dans le
o
a)
fichier DBM, les lit depuis ce fichier et ferme le fichier.
>>dmie=ayb.pn'lba,''
> bfl
ndmoe(bal' c)
>>dmie'o' ='ere cfo
> bfl[fo]
prir
o'
>>dmie'a' ='dbr;mr be'
> bfl[br]
c a
oe er
>>pitdmie'o'
> rn bfl[fo]
prircfo
ere
o
>>pitdmie'a'
> rn bfl[br]
c br;mr be
d a
oe er
>>dmiecoe)
> bfl.ls(

La fonction h s k y )test la présence d’une clé.
a_e(
>>dmie=ayb.pn'lba,''
> bfl
ndmoe(bal' c)
>>dmiehsky'o'
> bfl.a_e(fo)
Tu
re

La fonction k y ( donne la liste des clés du fichier. Obtenir les clé est un pré-requis à tout
es)
parcours d’un fichier DBM. Comme pour les dictionnaires, il est possible de parcourir les
clés d’un fichier DBM avec un itérateur.
>>dmieky(
> bfl.es)
[fo,'a'
'o' br]
>>frkyi dmie
> o e n bfl:
www.fil.univ-lille1.fr/~marvie/python/chapitre5.html

1/7
08/07/13

Python et la persistance de données — InitiationPython 1.5.1 documentation

..
.
pitky dmieky
rn e, bfl[e]
foprircfo
o ere
o
brc br;mr be
a d a
oe er

La fonction l n )donne le nombre d’entrées d’un fichier.
e(
>>lndmie
> e(bfl)
2

L’opérateur d l permet de supprimer une entrée (ce qui suit le fonctionnement standard
e
d’un dictionnaire).
>>dmieky(
> bfl.es)
[fo,'a'
'o' br]
>>dldmie'o'
> e bfl[fo]
>>dmieky(
> bfl.es)
[br]
'a'
>>lndmie
> e(bfl)
1
>>dmiecoe)
> bfl.ls(

Limitations
Les fichiers DBM permettent uniquement de rendre persistant des chaînes de caractères.
La conversion objet vers chaîne (et réciproquement) doit être gérée manuellement, ce qui
rend leur utilisation rapidement complexe pour des objets composites.

Pickle et Shelve
Object pickling
Le module p c l (standard en Python) permet la sérialisation des objets mémoire en
ike
chaînes (et réciproquement). Il est utile pour la persistance et le transferts de données sur un
réseau.
>>ipr pcl
> mot ike

La manipulation des données utilise un fichier par sérialisation, où les données sont
stockées sous forme de chaînes. Il n’y a pas de structuration des données (donc pas de
recherche rapide possible).

(Dé)Sérialisation et fichiers
La classe P c l r est un sérialiseur vers un fichier et la fonction d m ( réalise la
ike
up)
sérialisation d’un objet (il existe aussi une fonction équivalente dans le module). L’exemple
suivant sérialise un dictionnaire dans le fichier f o s v d
o.ae .
>>fo={a:'a' '' 'b' '' 'c'
> o
'' aa, b: bb, c: cc}
www.fil.univ-lille1.fr/~marvie/python/chapitre5.html

2/7
08/07/13

Python et la persistance de données — InitiationPython 1.5.1 documentation

>>otu =oe(fosvd,''
> upt
pn'o.ae' w)
>>p=pcl.ike(upt
>
ikePclrotu)
>>pdm(o)
> .upfo
>>otu.ls(
> uptcoe)

#1
()
#2
()

Ce qui est équivalent à l’utilisation de la fonction d m du module.
up
>>otu =oe(fosvd,''
> upt
pn'o.ae' w)
>>pcl.upfo otu)
> ikedm(o, upt
>>otu.ls(
> uptcoe)

#12
(,)

La classe U p c l rest un dé-sérialiseur depuis un fichier et la fonction l a ( réalise la dénike
od)
sérialisation d’un objet (il existe aussi une fonction équivalente dans le module). L’exemple
suivant recharge depuis le fichier f o s v d le dictionnaire sérialisé dans l’exemple
o.ae
précédent.
>>ipt=oe(fosvd,''
> nu
pn'o.ae' r)
>>p=pcl.nike(nu)
>
ikeUpclript
>>fo =pla(
> o2
.od)
>>iptcoe)
> nu.ls(
>>fo
> o2
{a:'a' '' 'c' '' 'b'
'' aa, c: cc, b: bb}

#1
()
#2
()

Ce qui est équivalent à l’utilisation de la fonction l a du module.
od
>>ipt=oe(fosvd,''
> nu
pn'o.ae' r)
>>fo =pcl.odipt
> o2
ikela(nu)
>>iptcoe)
> nu.ls(

#12
(,)

(Dé)Sérialisation et chaînes de caractères
La fonction d m s ) sérialise un objet vers une chaîne (et non plus vers un fichier). Cette
up(
opération est pratique pour échanger des messages sur un réseau par exemple, ou bien
pour les stocker dans un fichier DBM.
>>dt =pcl.up(o)
> aa
ikedmsfo
>>dt
> aa
"d0n''n1n'a'n2nScpSccps''n5n'b'n6n.
(pSapSaaps''n3n'c'n4nSbpSbbps"

La fonction l a s )dé-sérialise une chaîne vers un objet.
od(
>>fo =pcl.od(aa
> o3
ikelasdt)
>>fo
> o3
{a:'a' '' 'c' '' 'b'
'' aa, c: cc, b: bb}

DBM + Pickle = Shelves
Le module

s e v sexploite
hle

p c l pour
ike

les deux modules précédents (en offrant l’interface du second):

sérialiser les objets (éventuellement complexes),

www.fil.univ-lille1.fr/~marvie/python/chapitre5.html

3/7
08/07/13

Python et la persistance de données — InitiationPython 1.5.1 documentation

a y b pour
ndm

la gestion des clés et des fichiers.

>>ipr sev
> mot hle

L’exemple suivant crée un fichier b s dans lequel nous stockons un dictionnaire associé à
ae
la clé f o Puis, nous ouvrons de nouveau ce fichier pour récupérer dans le dictionnaire
o.
stocké l’entrée associée à la clé a
.
>>bs =sev.pn'ae)
> ae
hleoe(bs'
>>bs[fo]={a:[a''2] '' [b''2]
> ae'o'
'' '1,a', b: '1,b'}
>>bs.ls(
> aecoe)
>>bs2=sev.pn'ae)
> ae
hleoe(bs'
>>pitbs2'o'[a]
> rn ae[fo]''
[a' '2]
'1, a'
>>bs2coe)
> ae.ls(

Remarques
La concurrence de mise à jour n’est pas supportée avec s e v , une possibilité est
hle
d’utiliser f n l
ct .
La définition des classes doit être importable au moment du chargement des données
par p c l . Il n’est donc pas suffisant de partager le fichier de donnée, mais il faut
ike
aussi partager les modules de mise en oeuvre des classes utilisées (qui doivent être
présentes dans le P T O P T ).
YHNAH
La compatibilité des fichiers n’est pas garantie entre deux implémentations de DBM. Il
n’y a donc que portabilité du code, pas des données.

Python et SQL
Exemple avec SQlite
Python inclut un module d’accès aux bases de données offrant une interface standardisée
(de facto). Des mises en oeuvre existent pour les différentes bases de données courantes.
Toutefois, l’utilisation de chaque base peut varier, donc le code Python d’accès à une base
n’est pas 100% portable. Il est donc recommandé dans une application de définir une
couche d’abstraction de la base.
L’utilisation d’une base de données est ici illustré avec une base

slt3
qie .

Une base sqlite3 est représentée sur le disque par un fichier.
C’est une base embarquée (il n’y a pas de serveur à faire tourner).
Elle gère bien des table de plusieurs centaines de milliers de lignes.
Elle est incluse dans toutes les distributions de Python depuis la version
2.5.
>>ipr slt3
> mot qie

www.fil.univ-lille1.fr/~marvie/python/chapitre5.html

4/7
08/07/13

Python et la persistance de données — InitiationPython 1.5.1 documentation

Opérations de base
La fonction c n e t ) crée un objet représentant la connexion à une base de données. Si la
onc(
base n’existe pas, elle sera créé.
>>cnein=slt3cnet'etslt3)
> onxo
qie.onc(ts.qie'

Il est aussi possible de créer une base en mémoire (et donc sans version persistante sur le
disque).
>>cnein=slt3cnet'mmr:)
> onxo
qie.onc(:eoy'

Des curseurs sont utilisés pour les interactions avec la base: émission de requêtes SQL. Ils
sont créés par l’objet connexion. Un curseur offre la méthode e e u e qui permet de
xct
demander à la base l’évaluation d’une requête SQL. Le curseur est ici utilisé pour créer une
table t s 1 ayant un seul champ v l de type entier. Ensuite, le curseur est utilisé pour
et
a
insérer une valeur dans cette table.
>>crer=cneincro(
> usu
onxo.usr)
>>crereeue"RAETBEts1(a itgr"
> usu.xct(CET AL et vl nee))
<qie.usrojc a 0..
slt3Cro bet t x.>
>>crereeue"NETIT ts1VLE(1"
> usu.xct(ISR NO et AUS-))
<qie.usrojc a 0..
slt3Cro bet t x.>

Insérer des données
Une insertion peut se faire en utilisant un tuple (comme dans l’exemple précédent) ou un
dictionnaire pour fournir les valeurs. Dans le cas de l’utilisation des tuples, les données sont
prises dans l’ordre du tuple qui doit être de même longueur que le tuple de format de la
requête (argument de la clause V L E ). L’exemple suivant crée une nouvelle table et utilise
AUS
un dictionnaire pour fournir les valeurs à insérer. La méthode e e u e a y permet d’insérer
xctmn
une séquence de données dans une table sans avoir à faire une boucle en Python.
>>crer=cneincro(
> usu
onxo.usr)
>>crereeue'RAETBEts2(aetx,frtaetx))
> usu.xct(CET AL et nm et isnm et'
<qie.usrojc a 0..
slt3Cro bet t x.>
>>crereeue'NETIT ts2VLE (,?' (de,'on)
> usu.xct(ISR NO et AUS ? ), 'o' jh')
<qie.usrojc a 0..
slt3Cro bet t x.>
>>vlus=('atn,'ire) (dpn' 'al)
> aer
(mri' per', 'uot, pu')
>>crereeueay'NETIT ts2VLE (,?' vlus
> usu.xctmn(ISR NO et AUS ? ), aer)
<qie.usrojc a 0..
slt3Cro bet t x.>

Récupérer des données
Les résultats de requêtes (réponses à une command s l c ) sont des structures de
eet
données Python: listes (ensemble des réponses) de tuples (les données d’une réponse).
www.fil.univ-lille1.fr/~marvie/python/chapitre5.html

5/7
08/07/13

Python et la persistance de données — InitiationPython 1.5.1 documentation

Les opération f t h n ( et f t h l ( offertes par le curseur permettent de récupérer
ecoe)
ecal)
respectivement une valeur (en fait les valeurs une par une) ou toutes les valeurs. Attention
sur les s l c retournant beaucoup de réponses, le f t h l ( a une borne supérieure.
eet
ecal)
L’exemple suivant exécute une requête sur la base et récupère d’abord la première
réponse, en affichant le premier champs, puis toutes les réponses restantes, en affichant les
deux champs.
>>crereeue"EET*FO ts2)
> usu.xct(SLC
RM et"
<qie.usrojc a 0..
slt3Cro bet t x.>
>>pitcrerfthn(
> rn usu.ecoe)
('o' ujh'
ude, 'on)
>>vlus=crerfthl(
> aer
usu.ecal)
>>frvi vlus
> o
n aer:
..
.
pitv0,v1
rn [] []
..
.
mri per
atn ire
dpn pu
uot al

Opérations complémentaires
L’objet représentant une connexion offre les méthodes suivantes.
c o e ) demande
ls(

explicitement la fermeture d’une connexion (c’est implicite lorsque
l’objet connexion est détruit au sens Python).
c m i ( valide une transaction avec la base.
omt)
r l b c ( annule une transaction avec la base.
olak)
En complément, [2] présente le module dans son ensemble.

Exercices
Module «Modèle» du MVC
Ecrire un script Python qui crée une table représentant des étudiants avec les champs
suivants (le type des données est précisé entre parenthèses): num dossier ( i t g r nom
n e e ),
( t x ), prénom ( t x ), université ( t x ), discipline ( t x ), niveau ( i t g r
et
et
et
et
n e e ),
moyenne( i t g r
n e e ).
Ecrire un programme Python chargeant l’ensemble des données du fichier e u i n s x l
tdat.m
dans cette table. Pour cela, une partie du code de l’exercice précédent est réutilisable pour
le parcours de l’arbre DOM.

Module «Contrôleur» du MVC
Développer une classe Controleur qui propose les traitements suivants sur la base de
données:
www.fil.univ-lille1.fr/~marvie/python/chapitre5.html

6/7
08/07/13

Python et la persistance de données — InitiationPython 1.5.1 documentation

obtenir la liste des numéros de dossiers, nom et prénom des étudiants,
obtenir la fiche complète d’un étudiant par rapport à son numéro de dossier,
insérer une fiche d’étudiant en fournissant toutes les informations.
[1] L’utilisation du module d mrevient à utiliser une mise en oeuvre particulière.
b
[2] http://docs.python.org/library/sqlite3.html

www.fil.univ-lille1.fr/~marvie/python/chapitre5.html

7/7

Contenu connexe

Tendances

PhyloJava : une application de phylogénie sur la grille DATAGRID
PhyloJava : une application de phylogénie sur la grille DATAGRIDPhyloJava : une application de phylogénie sur la grille DATAGRID
PhyloJava : une application de phylogénie sur la grille DATAGRIDsuive
 
Atelier symfony n 2
Atelier symfony n 2Atelier symfony n 2
Atelier symfony n 2Amir Souissi
 
utilisation des core dump sous linux
utilisation des core dump sous linuxutilisation des core dump sous linux
utilisation des core dump sous linuxThierry Gayet
 
BH Team - Mettez un python dans votre robot !
BH Team - Mettez un python dans votre robot !BH Team - Mettez un python dans votre robot !
BH Team - Mettez un python dans votre robot !Yannick Jost
 
Administration linux
Administration linuxAdministration linux
Administration linuxJoeongala
 
LINUX Mise en place d’une exploitation industrialisée – automatisée – sécuris...
LINUX Mise en place d’une exploitation industrialisée – automatisée – sécuris...LINUX Mise en place d’une exploitation industrialisée – automatisée – sécuris...
LINUX Mise en place d’une exploitation industrialisée – automatisée – sécuris...Jean-Antoine Moreau
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en gokader15
 
L’ Administration des Réseaux en Pratique
L’ Administration des Réseaux en PratiqueL’ Administration des Réseaux en Pratique
L’ Administration des Réseaux en PratiqueAmadou Dia
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redoThierry Gayet
 
Processus pére fils
Processus pére filsProcessus pére fils
Processus pére filsSelman Dridi
 

Tendances (20)

Ch1 p1
Ch1 p1Ch1 p1
Ch1 p1
 
PhyloJava : une application de phylogénie sur la grille DATAGRID
PhyloJava : une application de phylogénie sur la grille DATAGRIDPhyloJava : une application de phylogénie sur la grille DATAGRID
PhyloJava : une application de phylogénie sur la grille DATAGRID
 
Tp n 1 linux
Tp n 1 linuxTp n 1 linux
Tp n 1 linux
 
Atelier symfony n 2
Atelier symfony n 2Atelier symfony n 2
Atelier symfony n 2
 
Routage protocole
Routage protocoleRoutage protocole
Routage protocole
 
utilisation des core dump sous linux
utilisation des core dump sous linuxutilisation des core dump sous linux
utilisation des core dump sous linux
 
Présentation de data.table
Présentation de data.tablePrésentation de data.table
Présentation de data.table
 
Cours fichiersdiapo
Cours fichiersdiapoCours fichiersdiapo
Cours fichiersdiapo
 
BH Team - Mettez un python dans votre robot !
BH Team - Mettez un python dans votre robot !BH Team - Mettez un python dans votre robot !
BH Team - Mettez un python dans votre robot !
 
Administration linux
Administration linuxAdministration linux
Administration linux
 
Linux Administrateur
Linux AdministrateurLinux Administrateur
Linux Administrateur
 
NIO 2
NIO 2NIO 2
NIO 2
 
LINUX Mise en place d’une exploitation industrialisée – automatisée – sécuris...
LINUX Mise en place d’une exploitation industrialisée – automatisée – sécuris...LINUX Mise en place d’une exploitation industrialisée – automatisée – sécuris...
LINUX Mise en place d’une exploitation industrialisée – automatisée – sécuris...
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
L’ Administration des Réseaux en Pratique
L’ Administration des Réseaux en PratiqueL’ Administration des Réseaux en Pratique
L’ Administration des Réseaux en Pratique
 
Config ip
Config ipConfig ip
Config ip
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redo
 
Processus pére fils
Processus pére filsProcessus pére fils
Processus pére fils
 
s de base
s de bases de base
s de base
 
516356
516356516356
516356
 

En vedette

In01 - Programmation Android - 05 - Google map
In01 - Programmation Android - 05 - Google mapIn01 - Programmation Android - 05 - Google map
In01 - Programmation Android - 05 - Google mapYann Caron
 
In01 - Programmation Android - 03 - HMI
In01 - Programmation Android - 03 - HMIIn01 - Programmation Android - 03 - HMI
In01 - Programmation Android - 03 - HMIYann Caron
 
In01 - Programmation Android - 02 - android
In01 - Programmation Android - 02 - androidIn01 - Programmation Android - 02 - android
In01 - Programmation Android - 02 - androidYann Caron
 
In01 - Programmation Android - Travaux pratiques
In01 - Programmation Android - Travaux pratiquesIn01 - Programmation Android - Travaux pratiques
In01 - Programmation Android - Travaux pratiquesYann Caron
 
In01 - Programmation Android - 06 - publication
In01 - Programmation Android - 06 - publicationIn01 - Programmation Android - 06 - publication
In01 - Programmation Android - 06 - publicationYann Caron
 
SQLite: Light, Open Source Relational Database Management System
SQLite: Light, Open Source Relational Database Management SystemSQLite: Light, Open Source Relational Database Management System
SQLite: Light, Open Source Relational Database Management SystemTanner Jessel
 
In01 - Programmation Android - 04 - databases
In01 - Programmation Android - 04 - databasesIn01 - Programmation Android - 04 - databases
In01 - Programmation Android - 04 - databasesYann Caron
 
In01 - Programmation Android - 07 - techniques avancées
In01 - Programmation Android - 07 - techniques avancéesIn01 - Programmation Android - 07 - techniques avancées
In01 - Programmation Android - 07 - techniques avancéesYann Caron
 
In01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionIn01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionYann Caron
 
Sif007 Programaanalitico1
Sif007 Programaanalitico1Sif007 Programaanalitico1
Sif007 Programaanalitico1Alan007
 
Diapo diigo
Diapo diigoDiapo diigo
Diapo diigorrrrpppp
 
Présentation polytechnique amep 14nov13
Présentation polytechnique amep 14nov13Présentation polytechnique amep 14nov13
Présentation polytechnique amep 14nov13Anass PATEL
 
(60ki) Administración Electrónica y Gobierno Abierto (OPEN & E-GOVERNMENT)
(60ki) Administración Electrónica y Gobierno Abierto (OPEN & E-GOVERNMENT)(60ki) Administración Electrónica y Gobierno Abierto (OPEN & E-GOVERNMENT)
(60ki) Administración Electrónica y Gobierno Abierto (OPEN & E-GOVERNMENT)Universidad Internacional Menendez Pelayo
 
Avis d'appel candidatures suivi evaluation au ROPPA
Avis d'appel candidatures suivi evaluation au ROPPAAvis d'appel candidatures suivi evaluation au ROPPA
Avis d'appel candidatures suivi evaluation au ROPPAFatimata Kone
 
Dossier de production- groupe 71
Dossier de production- groupe 71Dossier de production- groupe 71
Dossier de production- groupe 71LAFORET42
 

En vedette (20)

In01 - Programmation Android - 05 - Google map
In01 - Programmation Android - 05 - Google mapIn01 - Programmation Android - 05 - Google map
In01 - Programmation Android - 05 - Google map
 
In01 - Programmation Android - 03 - HMI
In01 - Programmation Android - 03 - HMIIn01 - Programmation Android - 03 - HMI
In01 - Programmation Android - 03 - HMI
 
SQLite 3
SQLite 3SQLite 3
SQLite 3
 
In01 - Programmation Android - 02 - android
In01 - Programmation Android - 02 - androidIn01 - Programmation Android - 02 - android
In01 - Programmation Android - 02 - android
 
In01 - Programmation Android - Travaux pratiques
In01 - Programmation Android - Travaux pratiquesIn01 - Programmation Android - Travaux pratiques
In01 - Programmation Android - Travaux pratiques
 
In01 - Programmation Android - 06 - publication
In01 - Programmation Android - 06 - publicationIn01 - Programmation Android - 06 - publication
In01 - Programmation Android - 06 - publication
 
SQLite: Light, Open Source Relational Database Management System
SQLite: Light, Open Source Relational Database Management SystemSQLite: Light, Open Source Relational Database Management System
SQLite: Light, Open Source Relational Database Management System
 
SQLite - Overview
SQLite - OverviewSQLite - Overview
SQLite - Overview
 
In01 - Programmation Android - 04 - databases
In01 - Programmation Android - 04 - databasesIn01 - Programmation Android - 04 - databases
In01 - Programmation Android - 04 - databases
 
In01 - Programmation Android - 07 - techniques avancées
In01 - Programmation Android - 07 - techniques avancéesIn01 - Programmation Android - 07 - techniques avancées
In01 - Programmation Android - 07 - techniques avancées
 
In01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionIn01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introduction
 
Sif007 Programaanalitico1
Sif007 Programaanalitico1Sif007 Programaanalitico1
Sif007 Programaanalitico1
 
Supervisión
SupervisiónSupervisión
Supervisión
 
Diapo diigo
Diapo diigoDiapo diigo
Diapo diigo
 
Quinta Sesión Preescolar 2015
Quinta Sesión Preescolar 2015Quinta Sesión Preescolar 2015
Quinta Sesión Preescolar 2015
 
Présentation polytechnique amep 14nov13
Présentation polytechnique amep 14nov13Présentation polytechnique amep 14nov13
Présentation polytechnique amep 14nov13
 
(60ki) Administración Electrónica y Gobierno Abierto (OPEN & E-GOVERNMENT)
(60ki) Administración Electrónica y Gobierno Abierto (OPEN & E-GOVERNMENT)(60ki) Administración Electrónica y Gobierno Abierto (OPEN & E-GOVERNMENT)
(60ki) Administración Electrónica y Gobierno Abierto (OPEN & E-GOVERNMENT)
 
Avis d'appel candidatures suivi evaluation au ROPPA
Avis d'appel candidatures suivi evaluation au ROPPAAvis d'appel candidatures suivi evaluation au ROPPA
Avis d'appel candidatures suivi evaluation au ROPPA
 
Dossier de production- groupe 71
Dossier de production- groupe 71Dossier de production- groupe 71
Dossier de production- groupe 71
 
Bucano
BucanoBucano
Bucano
 

Similaire à Python et la persistance de données — initiation python 1.5

FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieMariem ZAOUALI
 
Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Laurent BUNIET
 
Nouveautés dans TYPO3 CMS 6.0
Nouveautés dans TYPO3 CMS 6.0Nouveautés dans TYPO3 CMS 6.0
Nouveautés dans TYPO3 CMS 6.0Idéative
 
programmation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxprogrammation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxManalAg
 
Rapport administration systèmes et supervision réseaux tp2 diabang master1 tr
Rapport administration systèmes et supervision réseaux tp2 diabang master1 trRapport administration systèmes et supervision réseaux tp2 diabang master1 tr
Rapport administration systèmes et supervision réseaux tp2 diabang master1 trCheikh Tidiane DIABANG
 
Les concepts de la programmation fonctionnelle illustrés avec Java 8
Les concepts de la programmation fonctionnelle illustrés avec Java 8Les concepts de la programmation fonctionnelle illustrés avec Java 8
Les concepts de la programmation fonctionnelle illustrés avec Java 8Yannick Chartois
 
Need it help in Operating System quiz(computer language) and in some course
Need it help in Operating System quiz(computer language) and in some courseNeed it help in Operating System quiz(computer language) and in some course
Need it help in Operating System quiz(computer language) and in some courseDouria Zohbi
 
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Abdelouahed Abdou
 
Pres_ java_Fichier_Suite_cour sur les fichier en java.pdf
Pres_ java_Fichier_Suite_cour sur les fichier en java.pdfPres_ java_Fichier_Suite_cour sur les fichier en java.pdf
Pres_ java_Fichier_Suite_cour sur les fichier en java.pdfHERGALYOUSSEF
 
Entrees sorties
Entrees sortiesEntrees sorties
Entrees sortiesyazidds2
 
Mat lab1
Mat lab1Mat lab1
Mat lab1fouadDD
 

Similaire à Python et la persistance de données — initiation python 1.5 (20)

Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
 
Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Cours php
Cours phpCours php
Cours php
 
Nouveautés dans TYPO3 CMS 6.0
Nouveautés dans TYPO3 CMS 6.0Nouveautés dans TYPO3 CMS 6.0
Nouveautés dans TYPO3 CMS 6.0
 
programmation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxprogrammation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptx
 
Rapport administration systèmes et supervision réseaux tp2 diabang master1 tr
Rapport administration systèmes et supervision réseaux tp2 diabang master1 trRapport administration systèmes et supervision réseaux tp2 diabang master1 tr
Rapport administration systèmes et supervision réseaux tp2 diabang master1 tr
 
Les concepts de la programmation fonctionnelle illustrés avec Java 8
Les concepts de la programmation fonctionnelle illustrés avec Java 8Les concepts de la programmation fonctionnelle illustrés avec Java 8
Les concepts de la programmation fonctionnelle illustrés avec Java 8
 
Need it help in Operating System quiz(computer language) and in some course
Need it help in Operating System quiz(computer language) and in some courseNeed it help in Operating System quiz(computer language) and in some course
Need it help in Operating System quiz(computer language) and in some course
 
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
 
Pres_ java_Fichier_Suite_cour sur les fichier en java.pdf
Pres_ java_Fichier_Suite_cour sur les fichier en java.pdfPres_ java_Fichier_Suite_cour sur les fichier en java.pdf
Pres_ java_Fichier_Suite_cour sur les fichier en java.pdf
 
Entrees sorties
Entrees sortiesEntrees sorties
Entrees sorties
 
Mathématiques et Python
Mathématiques et PythonMathématiques et Python
Mathématiques et Python
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Formation python
Formation pythonFormation python
Formation python
 
Cours de Matlab
Cours de MatlabCours de Matlab
Cours de Matlab
 
Mat lab1
Mat lab1Mat lab1
Mat lab1
 

Python et la persistance de données — initiation python 1.5

  • 1. 08/07/13 Python et la persistance de données — InitiationPython 1.5.1 documentation Python et la persistance de données Fichiers DBM Description et utilisation Le module a y b [1] offre une solution pour des besoins simples de persistance en utilisant ndm des fichiers plats. Il propose une solution standard indépendante de l’implémentation. Un fichier DBM s’utilise comme un dictionnaire, donc relativement simplement, seul l’initialisation est différente (ouverture du fichier). Les données sont manipulées comme des chaînes et accessibles à l’aide de clés. La fonction o e ( a e pnnm, n’existe pas»). '' c) ouvre le fichier nommé n m (' ' ae c signifie «en le créant s’il >>ipr ayb > mot ndm >>dmie=ayb.pn'lba,'' > bfl ndmoe(bal' c) La fonction c o e ) ferme le fichier (requis ou non selon les implémentations, pour être sûr ls( que les données sont sauvées il vaut mieux utiliser explicitement c o e l s ). >>dmiecoe) > bfl.ls( La lecture et l’écriture se fait comme dans un dictionnaire, mais les clés sont obligatoirement des chaînes. L’exemple suivant crée deux entrées ( f o et b r dans le o a) fichier DBM, les lit depuis ce fichier et ferme le fichier. >>dmie=ayb.pn'lba,'' > bfl ndmoe(bal' c) >>dmie'o' ='ere cfo > bfl[fo] prir o' >>dmie'a' ='dbr;mr be' > bfl[br] c a oe er >>pitdmie'o' > rn bfl[fo] prircfo ere o >>pitdmie'a' > rn bfl[br] c br;mr be d a oe er >>dmiecoe) > bfl.ls( La fonction h s k y )test la présence d’une clé. a_e( >>dmie=ayb.pn'lba,'' > bfl ndmoe(bal' c) >>dmiehsky'o' > bfl.a_e(fo) Tu re La fonction k y ( donne la liste des clés du fichier. Obtenir les clé est un pré-requis à tout es) parcours d’un fichier DBM. Comme pour les dictionnaires, il est possible de parcourir les clés d’un fichier DBM avec un itérateur. >>dmieky( > bfl.es) [fo,'a' 'o' br] >>frkyi dmie > o e n bfl: www.fil.univ-lille1.fr/~marvie/python/chapitre5.html 1/7
  • 2. 08/07/13 Python et la persistance de données — InitiationPython 1.5.1 documentation .. . pitky dmieky rn e, bfl[e] foprircfo o ere o brc br;mr be a d a oe er La fonction l n )donne le nombre d’entrées d’un fichier. e( >>lndmie > e(bfl) 2 L’opérateur d l permet de supprimer une entrée (ce qui suit le fonctionnement standard e d’un dictionnaire). >>dmieky( > bfl.es) [fo,'a' 'o' br] >>dldmie'o' > e bfl[fo] >>dmieky( > bfl.es) [br] 'a' >>lndmie > e(bfl) 1 >>dmiecoe) > bfl.ls( Limitations Les fichiers DBM permettent uniquement de rendre persistant des chaînes de caractères. La conversion objet vers chaîne (et réciproquement) doit être gérée manuellement, ce qui rend leur utilisation rapidement complexe pour des objets composites. Pickle et Shelve Object pickling Le module p c l (standard en Python) permet la sérialisation des objets mémoire en ike chaînes (et réciproquement). Il est utile pour la persistance et le transferts de données sur un réseau. >>ipr pcl > mot ike La manipulation des données utilise un fichier par sérialisation, où les données sont stockées sous forme de chaînes. Il n’y a pas de structuration des données (donc pas de recherche rapide possible). (Dé)Sérialisation et fichiers La classe P c l r est un sérialiseur vers un fichier et la fonction d m ( réalise la ike up) sérialisation d’un objet (il existe aussi une fonction équivalente dans le module). L’exemple suivant sérialise un dictionnaire dans le fichier f o s v d o.ae . >>fo={a:'a' '' 'b' '' 'c' > o '' aa, b: bb, c: cc} www.fil.univ-lille1.fr/~marvie/python/chapitre5.html 2/7
  • 3. 08/07/13 Python et la persistance de données — InitiationPython 1.5.1 documentation >>otu =oe(fosvd,'' > upt pn'o.ae' w) >>p=pcl.ike(upt > ikePclrotu) >>pdm(o) > .upfo >>otu.ls( > uptcoe) #1 () #2 () Ce qui est équivalent à l’utilisation de la fonction d m du module. up >>otu =oe(fosvd,'' > upt pn'o.ae' w) >>pcl.upfo otu) > ikedm(o, upt >>otu.ls( > uptcoe) #12 (,) La classe U p c l rest un dé-sérialiseur depuis un fichier et la fonction l a ( réalise la dénike od) sérialisation d’un objet (il existe aussi une fonction équivalente dans le module). L’exemple suivant recharge depuis le fichier f o s v d le dictionnaire sérialisé dans l’exemple o.ae précédent. >>ipt=oe(fosvd,'' > nu pn'o.ae' r) >>p=pcl.nike(nu) > ikeUpclript >>fo =pla( > o2 .od) >>iptcoe) > nu.ls( >>fo > o2 {a:'a' '' 'c' '' 'b' '' aa, c: cc, b: bb} #1 () #2 () Ce qui est équivalent à l’utilisation de la fonction l a du module. od >>ipt=oe(fosvd,'' > nu pn'o.ae' r) >>fo =pcl.odipt > o2 ikela(nu) >>iptcoe) > nu.ls( #12 (,) (Dé)Sérialisation et chaînes de caractères La fonction d m s ) sérialise un objet vers une chaîne (et non plus vers un fichier). Cette up( opération est pratique pour échanger des messages sur un réseau par exemple, ou bien pour les stocker dans un fichier DBM. >>dt =pcl.up(o) > aa ikedmsfo >>dt > aa "d0n''n1n'a'n2nScpSccps''n5n'b'n6n. (pSapSaaps''n3n'c'n4nSbpSbbps" La fonction l a s )dé-sérialise une chaîne vers un objet. od( >>fo =pcl.od(aa > o3 ikelasdt) >>fo > o3 {a:'a' '' 'c' '' 'b' '' aa, c: cc, b: bb} DBM + Pickle = Shelves Le module s e v sexploite hle p c l pour ike les deux modules précédents (en offrant l’interface du second): sérialiser les objets (éventuellement complexes), www.fil.univ-lille1.fr/~marvie/python/chapitre5.html 3/7
  • 4. 08/07/13 Python et la persistance de données — InitiationPython 1.5.1 documentation a y b pour ndm la gestion des clés et des fichiers. >>ipr sev > mot hle L’exemple suivant crée un fichier b s dans lequel nous stockons un dictionnaire associé à ae la clé f o Puis, nous ouvrons de nouveau ce fichier pour récupérer dans le dictionnaire o. stocké l’entrée associée à la clé a . >>bs =sev.pn'ae) > ae hleoe(bs' >>bs[fo]={a:[a''2] '' [b''2] > ae'o' '' '1,a', b: '1,b'} >>bs.ls( > aecoe) >>bs2=sev.pn'ae) > ae hleoe(bs' >>pitbs2'o'[a] > rn ae[fo]'' [a' '2] '1, a' >>bs2coe) > ae.ls( Remarques La concurrence de mise à jour n’est pas supportée avec s e v , une possibilité est hle d’utiliser f n l ct . La définition des classes doit être importable au moment du chargement des données par p c l . Il n’est donc pas suffisant de partager le fichier de donnée, mais il faut ike aussi partager les modules de mise en oeuvre des classes utilisées (qui doivent être présentes dans le P T O P T ). YHNAH La compatibilité des fichiers n’est pas garantie entre deux implémentations de DBM. Il n’y a donc que portabilité du code, pas des données. Python et SQL Exemple avec SQlite Python inclut un module d’accès aux bases de données offrant une interface standardisée (de facto). Des mises en oeuvre existent pour les différentes bases de données courantes. Toutefois, l’utilisation de chaque base peut varier, donc le code Python d’accès à une base n’est pas 100% portable. Il est donc recommandé dans une application de définir une couche d’abstraction de la base. L’utilisation d’une base de données est ici illustré avec une base slt3 qie . Une base sqlite3 est représentée sur le disque par un fichier. C’est une base embarquée (il n’y a pas de serveur à faire tourner). Elle gère bien des table de plusieurs centaines de milliers de lignes. Elle est incluse dans toutes les distributions de Python depuis la version 2.5. >>ipr slt3 > mot qie www.fil.univ-lille1.fr/~marvie/python/chapitre5.html 4/7
  • 5. 08/07/13 Python et la persistance de données — InitiationPython 1.5.1 documentation Opérations de base La fonction c n e t ) crée un objet représentant la connexion à une base de données. Si la onc( base n’existe pas, elle sera créé. >>cnein=slt3cnet'etslt3) > onxo qie.onc(ts.qie' Il est aussi possible de créer une base en mémoire (et donc sans version persistante sur le disque). >>cnein=slt3cnet'mmr:) > onxo qie.onc(:eoy' Des curseurs sont utilisés pour les interactions avec la base: émission de requêtes SQL. Ils sont créés par l’objet connexion. Un curseur offre la méthode e e u e qui permet de xct demander à la base l’évaluation d’une requête SQL. Le curseur est ici utilisé pour créer une table t s 1 ayant un seul champ v l de type entier. Ensuite, le curseur est utilisé pour et a insérer une valeur dans cette table. >>crer=cneincro( > usu onxo.usr) >>crereeue"RAETBEts1(a itgr" > usu.xct(CET AL et vl nee)) <qie.usrojc a 0.. slt3Cro bet t x.> >>crereeue"NETIT ts1VLE(1" > usu.xct(ISR NO et AUS-)) <qie.usrojc a 0.. slt3Cro bet t x.> Insérer des données Une insertion peut se faire en utilisant un tuple (comme dans l’exemple précédent) ou un dictionnaire pour fournir les valeurs. Dans le cas de l’utilisation des tuples, les données sont prises dans l’ordre du tuple qui doit être de même longueur que le tuple de format de la requête (argument de la clause V L E ). L’exemple suivant crée une nouvelle table et utilise AUS un dictionnaire pour fournir les valeurs à insérer. La méthode e e u e a y permet d’insérer xctmn une séquence de données dans une table sans avoir à faire une boucle en Python. >>crer=cneincro( > usu onxo.usr) >>crereeue'RAETBEts2(aetx,frtaetx)) > usu.xct(CET AL et nm et isnm et' <qie.usrojc a 0.. slt3Cro bet t x.> >>crereeue'NETIT ts2VLE (,?' (de,'on) > usu.xct(ISR NO et AUS ? ), 'o' jh') <qie.usrojc a 0.. slt3Cro bet t x.> >>vlus=('atn,'ire) (dpn' 'al) > aer (mri' per', 'uot, pu') >>crereeueay'NETIT ts2VLE (,?' vlus > usu.xctmn(ISR NO et AUS ? ), aer) <qie.usrojc a 0.. slt3Cro bet t x.> Récupérer des données Les résultats de requêtes (réponses à une command s l c ) sont des structures de eet données Python: listes (ensemble des réponses) de tuples (les données d’une réponse). www.fil.univ-lille1.fr/~marvie/python/chapitre5.html 5/7
  • 6. 08/07/13 Python et la persistance de données — InitiationPython 1.5.1 documentation Les opération f t h n ( et f t h l ( offertes par le curseur permettent de récupérer ecoe) ecal) respectivement une valeur (en fait les valeurs une par une) ou toutes les valeurs. Attention sur les s l c retournant beaucoup de réponses, le f t h l ( a une borne supérieure. eet ecal) L’exemple suivant exécute une requête sur la base et récupère d’abord la première réponse, en affichant le premier champs, puis toutes les réponses restantes, en affichant les deux champs. >>crereeue"EET*FO ts2) > usu.xct(SLC RM et" <qie.usrojc a 0.. slt3Cro bet t x.> >>pitcrerfthn( > rn usu.ecoe) ('o' ujh' ude, 'on) >>vlus=crerfthl( > aer usu.ecal) >>frvi vlus > o n aer: .. . pitv0,v1 rn [] [] .. . mri per atn ire dpn pu uot al Opérations complémentaires L’objet représentant une connexion offre les méthodes suivantes. c o e ) demande ls( explicitement la fermeture d’une connexion (c’est implicite lorsque l’objet connexion est détruit au sens Python). c m i ( valide une transaction avec la base. omt) r l b c ( annule une transaction avec la base. olak) En complément, [2] présente le module dans son ensemble. Exercices Module «Modèle» du MVC Ecrire un script Python qui crée une table représentant des étudiants avec les champs suivants (le type des données est précisé entre parenthèses): num dossier ( i t g r nom n e e ), ( t x ), prénom ( t x ), université ( t x ), discipline ( t x ), niveau ( i t g r et et et et n e e ), moyenne( i t g r n e e ). Ecrire un programme Python chargeant l’ensemble des données du fichier e u i n s x l tdat.m dans cette table. Pour cela, une partie du code de l’exercice précédent est réutilisable pour le parcours de l’arbre DOM. Module «Contrôleur» du MVC Développer une classe Controleur qui propose les traitements suivants sur la base de données: www.fil.univ-lille1.fr/~marvie/python/chapitre5.html 6/7
  • 7. 08/07/13 Python et la persistance de données — InitiationPython 1.5.1 documentation obtenir la liste des numéros de dossiers, nom et prénom des étudiants, obtenir la fiche complète d’un étudiant par rapport à son numéro de dossier, insérer une fiche d’étudiant en fournissant toutes les informations. [1] L’utilisation du module d mrevient à utiliser une mise en oeuvre particulière. b [2] http://docs.python.org/library/sqlite3.html www.fil.univ-lille1.fr/~marvie/python/chapitre5.html 7/7