Vous êtes ici : Accueil Tutoriels SQLAlchemy Reconstruction d'objets

Reconstruction d'objets

Lorsque l'on utilise des modèles SQLAlchemy, toutes les propriétés ne sont pas stockées en base. Certaines sont construites à la volée. Seulement, l'objet créé de toute pièces et celui récupéré de la base de données ne sont pas initialisés de la même manière. Pour faire les choses proprement, il faut donc recourir à la reconstruction d'objets.

L'idée est très simple. Lorsque l'on a un objet, on utilise son constructeur pour définir la manière dont il doit s'initialiser:

class Test(Base):
def __init__(self):
# initialisation

Seulement, lorsque l'objet est chargé depuis la base de données, cette méthode __init__ n'est pas utilisée. Et ce n'est pas un mal, puisqu'il faudrait alors faire attention à ce que l'on y met n'interfère pas avec le fonctionnement de SQLAlchemy.

Il convient en effet de faire le distinguo entre les données persistantes (qui seront stockées dans (ou qui proviennent de) la base de données et celle qui sont éphémères (crées à la volée et qui n'ont pas pour destination d'être sauvegardées).

Voici une solution pour gérer tous ces problèmes :

from sqlalchemy.orm import reconstructor

class Test(Base):
def __init__(self):
# initialisation des données persistantes
self.init()

@reconstructor
def init(self):
# initialisation des données éphémères

Et voilà le travail ! Cette architecture permet de gérer chaque type de données (éphémère ou persistante) à la bonne place.

Spinner