Tutoriel

Ce tutoriel a pour objectif de guider les développeurs avec une introduction pas à pas sur comment développer une application qui stocke ses données dans la ZODB.

Introduction

Commençons par un petit morceau de code que nous allons rendre fonctionnel avec la ZODB:

class Account(object):
    def __init__(self):
        self.balance = 0.0

    def deposit(self, amount):
        self.balance += amount

    def cash(self, amount):
        assert amount < self.balance
        self.balance -= amount

Ce code définit une classe simple qui gère le solde d'un compte en banque et fournit deux méthodes pour manipuler le solde : deposit et cash.

Installation

Avant d'être capable d'utiliser la ZODB nous avons à l'installer, en utilisant easy_install. Remarquez bien que le paquet s'appelle en fait "ZODB3":

$ easy_install ZODB3
...
$ python
>>> import ZODB

La ZODB est maintenant installée et peut être importée depuis votre installation Python.

Note

Si vous ne disposez pas de la commande easy_install sur votre système, suivez les instructions d'installation EasyInstall

Configuration

Lorsqu'un programme souhaite utiliser la ZODB il doit établir une connexion, comme pour les autres bases données. Pour la ZODB nous avons besoins de trois éléments différents : un système de stockage, une base de données et une connexion ::

>>> from ZODB.FileStorage import FileStorage
>>> from ZODB.DB import DB
>>> storage = FileStorage('Data.fs')
>>> db = DB(storage)
>>> connection = db.open()
>>> root = connection.root()

Nous créons un système de stockage appelé FileStorage, qui est le système par défaut utilisé par pratiquement tout le monde. Il garde les traces de toutes les données dans un fichier unique sur le disque nommé avec le premier paramètre fourni à l'instanciation. Enfin, nous récupérons la racine de la base de données à partir de la connexion que nous avons ouverte.

Stocker des objets

Pour stocker un objet dans la ZODB nous avons simplement à le lier à n'importe quel objet qui est déjà dans la base de données. En fait, l'objet racine fonctionne comme un point d'entrée. L'objet racine est un dictionnaire et vous pouvez commencer à y stocker directement vos objets de la façon suivante : :python:

>>> root['account-1'] = Account()
>>> root['account-2'] = Account()

Note

Les frameworks comme Zope ne créent qu'un seul objet à la racine, qui représente l'application elle même, et sous lequel chaque sous-objet est référencé. Ils choisissent un nom comme 'app' pour le premier objet qu'il place dans la ZODB.

Transactions

Maintenant vous avez deux objets placés dans votre objet racine et dans votre base de données. Toutefois ils ne sont pas encore stockés de façon permanente. La ZODB utilise le mécanisme des transactions et pour rendre vos modifications permanentes vous devez terminer votre transaction : :python:

>>> import transaction
>>> transaction.commit()
>>> root.keys()
['account-1', 'account-2']

Maintenant vous pouvez arrêter et redémarrer votre application et observer votre objet racine à nouveau, vous y trouverez les entrées 'account-1' et 'account-2' encore présentes ainsi que les objets que vous avez créés.

Si votre code réalise des modifications pendant une transaction et votre base se trouve dans un état non souhaité, il est possible de ne pas livrer les modifications. Vous pouvez annuler la transaction ce qui restituera les objets dans l'état d'avant le début de transaction : :python:

>>> del root['account-1']
>>> root.keys()
['account-2']
>>> transaction.abort()
>>> root.keys()
['account-1', 'account-2']

Warning

Les objets qui n'ont pas été stockés dans la ZODB ne seront pas restitués par la commande abort.

Objets persistants

Un des derniers aspects que nous devons couvrir est la persistance des objets par eux-mêmes. La ZODB peut stocker presque tous les objets que vous lui donnez (elle ne stocke pas les fichiers tels quels par exemple). Mais en fait pour savoir quel objet a été modifié la ZODB a besoin que ces objets collaborent avec la base de données. En général, vous vous contentez de dériver de la classe persistent.Persistent pour que cela fonctionne. Appliqué à notre classe d'exemple donne :python:

import persistent

class Account(persistent.Persistent):
    # ... same code as above ...

Résumé

Vous avez vu comment installer la ZODB et comment ouvrir une connexion avec la base de données dans votre application pour pouvoir stocker des objets. Nous avons également abordé deux commandes simple commit et abort. La documentation de référence contient plus d'informations sur chaque sujet.

Table des matières

Sujet précédent

Introduction

Sujet suivant

Programmation ZODB

Cette page


blog comments powered by Disqus