SQLAlchemy Déclaratif
Kesako ?JJ   Fonctionnalité implémentée à partir de SQLAlchemy 0.5JJ   Backporté en 0.4 pour nos besoinsJJ   Nouvelle mani...
AvantagesJJ   SQLAlchemyJJ   P      ermet d’avoir une meilleure visibilité sur la définition de notre base     de donnéesJ...
Définition d’une tableImports nécessairesimport sqlalchemyimport zope.interfacefrom arsia.db.pgsql import base, Declarativ...
Définition d’une tableDéfinition de la tableclass Bovin(DeclarativeBase, base.MappedClassBase):	 ‘‘‘ Mapper for the bovine...
Définition d’une tableDéfinition du schémaclass Bovin(DeclarativeBase, base.MappedClassBase):	...	   __tablename__ = u’bov...
Définition d’une tableAutre manière de définir une relationclass Bovin(DeclarativeBase, base.MappedClassBase):	...Bovin.mo...
Définition d’une tableDéfinition d’une contrainteclass Bovin(DeclarativeBase, base.MappedClassBase):	...	 __tablename__ = ...
Activation de la réflexion des tablesModification de la classe DeclarativeBasetry:	 from sqlalchemy.ext.declarative import...
Méthodes et propriétés de basesmapper_instance.sessionRenvoi la session associée à l’objet courant ou une nouvelle session...
Méthodes et propriétés de basemapper_instance.savemapper_instance.addAliases de mapper_instance.insertMapper.exists(cls, *...
Questions            11
LiensJJ   I      mplémentation dans arsia.db.pgsql : http://svn.arsia.affinitic.be/     Arsia/zope/arsia.db.pgsql/trunk/sr...
Prochain SlideShare
Chargement dans…5
×

Sqlalchemy declaratif

548 vues

Publié le

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
548
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
4
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Sqlalchemy declaratif

  1. 1. SQLAlchemy Déclaratif
  2. 2. Kesako ?JJ Fonctionnalité implémentée à partir de SQLAlchemy 0.5JJ Backporté en 0.4 pour nos besoinsJJ Nouvelle manière de définir les tables et leurs relationsJJ L’avenir de SQLAlchemy ? 1
  3. 3. AvantagesJJ SQLAlchemyJJ P ermet d’avoir une meilleure visibilité sur la définition de notre base de donnéesJJ Facilite l’écriture de tests 2
  4. 4. Définition d’une tableImports nécessairesimport sqlalchemyimport zope.interfacefrom arsia.db.pgsql import base, DeclarativeBaseInterface implémentée par la tableclass IBovin(zope.interface.Interface): ‘‘‘ Marker interface for bovines ‘‘‘ 3
  5. 5. Définition d’une tableDéfinition de la tableclass Bovin(DeclarativeBase, base.MappedClassBase): ‘‘‘ Mapper for the bovine table ‘‘‘ zope.interface.implements(IBovin) __tablename__ = u’bovin’ # Columns mark_nr = sqlalchemy.Column(‘mark_nr’, sqlalchemy.Text, nullable=False, primary_key=True, unique=True) birth_date = sqlalchemy.Column(‘begin_date’, sqlalchemy.DateTime, nullable=False) name = sqlalchemy.Column(‘denomination’, sqlalchemy.Text) 4
  6. 6. Définition d’une tableDéfinition du schémaclass Bovin(DeclarativeBase, base.MappedClassBase): ... __tablename__ = u’bovin’ __table_args__ = {‘schema’: ‘cerise’}Définition d’une relationclass Bovin(DeclarativeBase, base.MappedClassBase): ... @classmethod def __declare_last__(cls): ‘‘‘ Defines the relations ‘‘‘ from mappers import mother Bovin.mother = sqlalchemy.orm.relation(mother.Mother, lazy=False, uselist=False)Les relations doivent être définie sur un objet pour lequel le mapper a été créé 5
  7. 7. Définition d’une tableAutre manière de définir une relationclass Bovin(DeclarativeBase, base.MappedClassBase): ...Bovin.mother = sqlalchemy.orm.relation(Mother, lazy=False, uselist=False)Définition d’un indexclass Bovin(DeclarativeBase, base.MappedClassBase): ...sqlalchemy.Index( ‘mark_nr_idx’, Bovin.__table__.c.mark_nr) 6
  8. 8. Définition d’une tableDéfinition d’une contrainteclass Bovin(DeclarativeBase, base.MappedClassBase): ... __tablename__ = u’bovin’ __table_args__ = ( sqlalchemy.CheckConstraint(‘mark_nr != name’, name=’test_constraint’), {‘schema’: ‘cerise’}) # Columns 7
  9. 9. Activation de la réflexion des tablesModification de la classe DeclarativeBasetry: from sqlalchemy.ext.declarative import DeferredReflectionexcept ImportError: from arsia.db.core.declarative import DeferredReflectionDeclarativeBase = sqlalchemy.ext.declarative.declarative_base(cls=DeferredReflection) 8
  10. 10. Méthodes et propriétés de basesmapper_instance.sessionRenvoi la session associée à l’objet courant ou une nouvelle sessionmapper_instance.asDict(self)Renvoi l’objet courant sous la forme d’un dictionnairemapper_instance.clone(self)Renvoi une copie de l’objet courantmapper_instance.update(self, flush=True, commit=False)Met à jour l’objet courant dans la DBmapper_instance.insert(self, flush=True, commit=False)Insert l’objet courant dans la DBmapper_instance.save_or_update(self, flush=True, commit=False)Insert ou met à jour l’objet courant dans la DB 9
  11. 11. Méthodes et propriétés de basemapper_instance.savemapper_instance.addAliases de mapper_instance.insertMapper.exists(cls, **kwargs)Renvoi un booléen si une ligne dans la base de donnée correspond aux filtres donnéesExemple : Bovin.exists(mark_nr=u’BE12345678’)Mapper.get(cls, **kwargs)Renvoi une liste de résultat qui correspond aux filtres donnéesExemple d’utilisation : Bovin.get(snun_cde=u’BE12345678-0101’)Mapper.first(cls, **kwargs)Renvoi le premier résultat qui correspond aux filtres donnéesExemple d’utilisation : Bovin.fist(mark_nr=u’BE12345678’) 10
  12. 12. Questions 11
  13. 13. LiensJJ I mplémentation dans arsia.db.pgsql : http://svn.arsia.affinitic.be/ Arsia/zope/arsia.db.pgsql/trunk/src/arsia/db/pgsql/mappers/JJ I mplémentation dans arsia.db.oracle : http://svn.arsia.affinitic.be/ Arsia/zope/arsia.db.oracle/trunk/src/arsia/db/oracle/mappers/JJ Notre version de SQLAlchemy : http://hg.affinitic.be/sqlalchemy/JJ Documentation : http://docs.sqlalchemy.org/en/rel_0_7/orm/ extensions/declarative.html 12

×