Il y a deux (trois, mais je ne suis pas de comptage de l'Elixir, qu'il ne soit pas "officiel") façons de définir une persistance de l'objet avec SQLAlchemy:
Explicite de la syntaxe pour mapper des objets
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.orm import mapper
metadata = MetaData()
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
)
class User(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return "<User('%s')>" % (self.name)
mapper(User, users_table) # <Mapper at 0x...; User>
Syntaxe déclarative
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
def __init__(self, name):
self.name = name
def __repr__(self):
return "<User('%s')>" % (self.name)
Je vois que tout en utilisant les objets mappeur, je me sépare complètement l'ORM définition de la logique d'entreprise, tout en utilisant la syntaxe déclarative, à chaque fois que je modifie la logique de classes, je peux modifier la droite là la base de données de la classe (qui idéalement devrait être édité peu).
Ce que je ne suis pas complètement sûr, est l'approche qui est plus facile à gérer pour une application d'entreprise?
Je n'ai pas été en mesure de trouver un comparatif entre les deux méthodes de cartographie, pour être en mesure de décider ce qui est mieux à mon projet.
Je suis penchée vers l'utilisation de la voie "normale" (c'est à dire de ne pas le déclaratif de l'extension), car il me permet de "cacher", et gardez-le hors de la vue d'entreprise tous les ORM logique, mais j'aimerais entendre des arguments convaincants pour les deux approches.