• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Python et la persistance de données — initiation python 1.5
 

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

on

  • 160 views

 

Statistics

Views

Total Views
160
Views on SlideShare
160
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • 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