SlideShare une entreprise Scribd logo
SQLAlchemy Déclaratif
Kesako ?
JJ   Fonctionnalité implémentée à partir de SQLAlchemy 0.5
JJ   Backporté en 0.4 pour nos besoins
JJ   Nouvelle manière de définir les tables et leurs relations
JJ   L’avenir de SQLAlchemy ?




                                                                 1
Avantages
JJ   SQLAlchemy
JJ   P
      ermet d’avoir une meilleure visibilité sur la définition de notre base
     de données
JJ   Facilite l’écriture de tests




                                                                                2
Définition d’une table
Imports nécessaires
import sqlalchemy
import zope.interface
from arsia.db.pgsql import base, DeclarativeBase



Interface implémentée par la table
class IBovin(zope.interface.Interface):
	 ‘‘‘ Marker interface for bovines ‘‘‘




                                                   3
Définition d’une table
Définition de la table
class 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
Définition d’une table
Définition du schéma
class Bovin(DeclarativeBase, base.MappedClassBase):
	...

	   __tablename__ = u’bovin’
	   __table_args__ = {‘schema’: ‘cerise’}



Définition d’une relation
class 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
Définition d’une table
Autre manière de définir une relation
class Bovin(DeclarativeBase, base.MappedClassBase):
	...

Bovin.mother = sqlalchemy.orm.relation(Mother,
                                       lazy=False,
                                       uselist=False)



Définition d’un index
class Bovin(DeclarativeBase, base.MappedClassBase):
	...

sqlalchemy.Index(
	‘mark_nr_idx’,
	Bovin.__table__.c.mark_nr)




                                                        6
Définition d’une table
Définition d’une contrainte
class Bovin(DeclarativeBase, base.MappedClassBase):
	...

	 __tablename__ = u’bovin’
	 __table_args__ = (
		 sqlalchemy.CheckConstraint(‘mark_nr != name’, name=’test_constraint’),
		     {‘schema’: ‘cerise’})

	   # Columns




                                                                            7
Activation de la réflexion des tables
Modification de la classe DeclarativeBase
try:
	 from sqlalchemy.ext.declarative import DeferredReflection
except ImportError:
	 from arsia.db.core.declarative import DeferredReflection

DeclarativeBase = sqlalchemy.ext.declarative.declarative_base(cls=DeferredReflection)




                                                                                        8
Méthodes et propriétés de bases
mapper_instance.session
Renvoi la session associée à l’objet courant ou une nouvelle session


mapper_instance.asDict(self)
Renvoi l’objet courant sous la forme d’un dictionnaire


mapper_instance.clone(self)
Renvoi une copie de l’objet courant


mapper_instance.update(self, flush=True, commit=False)
Met à jour l’objet courant dans la DB


mapper_instance.insert(self, flush=True, commit=False)
Insert l’objet courant dans la DB


mapper_instance.save_or_update(self, flush=True, commit=False)
Insert ou met à jour l’objet courant dans la DB




                                                                       9
Méthodes et propriétés de base
mapper_instance.save
mapper_instance.add
Aliases de mapper_instance.insert


Mapper.exists(cls, **kwargs)
Renvoi un booléen si une ligne dans la base de donnée correspond aux filtres données
Exemple : Bovin.exists(mark_nr=u’BE12345678’)


Mapper.get(cls, **kwargs)
Renvoi une liste de résultat qui correspond aux filtres données
Exemple d’utilisation : Bovin.get(snun_cde=u’BE12345678-0101’)


Mapper.first(cls, **kwargs)
Renvoi le premier résultat qui correspond aux filtres données
Exemple d’utilisation : Bovin.fist(mark_nr=u’BE12345678’)




                                                                                       10
Questions




            11
Liens
JJ   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

Contenu connexe

Tendances

php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
Abdoulaye Dieng
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
Pierre Faure
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
zan
 
Découpler votre code pour assurer la réutilisabilité et la maintenabilite ...
Découpler votre code pour assurer la réutilisabilité et la maintenabilite ...Découpler votre code pour assurer la réutilisabilité et la maintenabilite ...
Découpler votre code pour assurer la réutilisabilité et la maintenabilite ...Fabien Potencier
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
Abdoulaye Dieng
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1
Régis Lutter
 
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Tarik Zakaria Benmerar
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4
halleck45
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
Youness Boukouchi
 
Interfaces controlesbasededonné
Interfaces controlesbasededonnéInterfaces controlesbasededonné
Interfaces controlesbasededonné
Fatima Zahra Fagroud
 
Jquery : les bases
Jquery : les basesJquery : les bases
Jquery : les bases
Voyelle Voyelle
 
jQuery
jQueryjQuery
jQuery
Franck SIMON
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
kadzaki
 

Tendances (13)

php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
 
Découpler votre code pour assurer la réutilisabilité et la maintenabilite ...
Découpler votre code pour assurer la réutilisabilité et la maintenabilite ...Découpler votre code pour assurer la réutilisabilité et la maintenabilite ...
Découpler votre code pour assurer la réutilisabilité et la maintenabilite ...
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1
 
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
 
Interfaces controlesbasededonné
Interfaces controlesbasededonnéInterfaces controlesbasededonné
Interfaces controlesbasededonné
 
Jquery : les bases
Jquery : les basesJquery : les bases
Jquery : les bases
 
jQuery
jQueryjQuery
jQuery
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
 

En vedette

Cypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCERTyou Formation
 
OpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonOpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizon
Yannick Foeillet
 
La sabiduría
La sabiduríaLa sabiduría
La sabiduría
anny zapata
 
Solucion y Psicologia del Bienestar
Solucion y Psicologia del BienestarSolucion y Psicologia del Bienestar
Solucion y Psicologia del Bienestar
Dr.Jose A Santos. +4500 contactos
 
Python debugger
Python debuggerPython debugger
Python debugger
Damien Garaud
 
SeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLSeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLParis, France
 
Les langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésLes langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésmercury_wood
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
yboussard
 
Modelisation agile 03122011
Modelisation agile  03122011Modelisation agile  03122011
Modelisation agile 03122011
agnes_crepet
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
Lilia Sfaxi
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec Odoo
Hassan WAHSISS
 
UML+Python
UML+PythonUML+Python
UML+Python
Sylvain Leroux
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec python
Mohammed TAMALI
 
Introduction à la POO - cours 1h
Introduction à la POO - cours 1hIntroduction à la POO - cours 1h
Introduction à la POO - cours 1h
Johann Dreo
 
Programmation orienté aspect
Programmation orienté aspectProgrammation orienté aspect
Programmation orienté aspect
meriem sari
 
alphorm.com - Formation UML
alphorm.com - Formation UMLalphorm.com - Formation UML
alphorm.com - Formation UML
Alphorm
 
gestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiquegestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiqueOussama Yoshiki
 
Python après 15 ans de JAVA
Python après 15 ans de JAVAPython après 15 ans de JAVA
Python après 15 ans de JAVA
Pierre-Alban DEWITTE
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 

En vedette (20)

Cypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-python
 
OpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonOpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizon
 
La sabiduría
La sabiduríaLa sabiduría
La sabiduría
 
Solucion y Psicologia del Bienestar
Solucion y Psicologia del BienestarSolucion y Psicologia del Bienestar
Solucion y Psicologia del Bienestar
 
Python debugger
Python debuggerPython debugger
Python debugger
 
SeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLSeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQL
 
Les langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésLes langages de programmation sont trop compliqués
Les langages de programmation sont trop compliqués
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
Modelisation agile 03122011
Modelisation agile  03122011Modelisation agile  03122011
Modelisation agile 03122011
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec Odoo
 
UML+Python
UML+PythonUML+Python
UML+Python
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec python
 
Introduction à la POO - cours 1h
Introduction à la POO - cours 1hIntroduction à la POO - cours 1h
Introduction à la POO - cours 1h
 
Programmation orienté aspect
Programmation orienté aspectProgrammation orienté aspect
Programmation orienté aspect
 
alphorm.com - Formation UML
alphorm.com - Formation UMLalphorm.com - Formation UML
alphorm.com - Formation UML
 
gestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiquegestion de magasin vente matériels informatique
gestion de magasin vente matériels informatique
 
CM uml-concepts-avances
CM uml-concepts-avancesCM uml-concepts-avances
CM uml-concepts-avances
 
Python après 15 ans de JAVA
Python après 15 ans de JAVAPython après 15 ans de JAVA
Python après 15 ans de JAVA
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 

Similaire à Sqlalchemy declaratif

chapitre 1 Android 2.pptx
chapitre 1 Android 2.pptxchapitre 1 Android 2.pptx
Mpdf 3
Mpdf 3Mpdf 3
Mpdf 3
Moez Moezm
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
abderrahim marzouk
 
chapitre6_Le_Langage_SQL-2.pdf
chapitre6_Le_Langage_SQL-2.pdfchapitre6_Le_Langage_SQL-2.pdf
chapitre6_Le_Langage_SQL-2.pdf
attamatta1234
 
Présentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptxPrésentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptx
salmachtioui1
 
Mpdf 2
Mpdf 2Mpdf 2
Mpdf 2
Moez Moezm
 
LP_chapitre3_Creation et gestion_BD_2019.pptx
LP_chapitre3_Creation et gestion_BD_2019.pptxLP_chapitre3_Creation et gestion_BD_2019.pptx
LP_chapitre3_Creation et gestion_BD_2019.pptx
FATIMAEZZAHRAEOUBELL
 
Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012
Claude Falguiere
 
Java - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQLJava - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQL
Noël
 
Mpdf 4
Mpdf 4Mpdf 4
Mpdf 4
Moez Moezm
 
Sql & excel
Sql & excelSql & excel
Sql & excel
Dominique GAYTE - NoToS
 
Mpdf 8
Mpdf 8Mpdf 8
Mpdf 8
Moez Moezm
 
Développement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdfDéveloppement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdf
YasushiTsubakik
 
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairieCours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
afdoumbia
 
3-android.pdf
3-android.pdf3-android.pdf
3-android.pdf
FethiBenYahia1
 
4- Architectures physique et logique d'ODI 11
4-  Architectures physique et logique d'ODI 114-  Architectures physique et logique d'ODI 11
4- Architectures physique et logique d'ODI 11
samr
 
Optimisation du stockage share point 2010
Optimisation du stockage share point 2010Optimisation du stockage share point 2010
Optimisation du stockage share point 2010
Nicolas Georgeault
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdf
AabidiHafid
 
Mpdf 13
Mpdf 13Mpdf 13
Mpdf 13
Moez Moezm
 
Ado.net vs jpa
Ado.net vs jpaAdo.net vs jpa
Ado.net vs jpaNetways
 

Similaire à Sqlalchemy declaratif (20)

chapitre 1 Android 2.pptx
chapitre 1 Android 2.pptxchapitre 1 Android 2.pptx
chapitre 1 Android 2.pptx
 
Mpdf 3
Mpdf 3Mpdf 3
Mpdf 3
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
 
chapitre6_Le_Langage_SQL-2.pdf
chapitre6_Le_Langage_SQL-2.pdfchapitre6_Le_Langage_SQL-2.pdf
chapitre6_Le_Langage_SQL-2.pdf
 
Présentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptxPrésentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptx
 
Mpdf 2
Mpdf 2Mpdf 2
Mpdf 2
 
LP_chapitre3_Creation et gestion_BD_2019.pptx
LP_chapitre3_Creation et gestion_BD_2019.pptxLP_chapitre3_Creation et gestion_BD_2019.pptx
LP_chapitre3_Creation et gestion_BD_2019.pptx
 
Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012
 
Java - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQLJava - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQL
 
Mpdf 4
Mpdf 4Mpdf 4
Mpdf 4
 
Sql & excel
Sql & excelSql & excel
Sql & excel
 
Mpdf 8
Mpdf 8Mpdf 8
Mpdf 8
 
Développement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdfDéveloppement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdf
 
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairieCours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
 
3-android.pdf
3-android.pdf3-android.pdf
3-android.pdf
 
4- Architectures physique et logique d'ODI 11
4-  Architectures physique et logique d'ODI 114-  Architectures physique et logique d'ODI 11
4- Architectures physique et logique d'ODI 11
 
Optimisation du stockage share point 2010
Optimisation du stockage share point 2010Optimisation du stockage share point 2010
Optimisation du stockage share point 2010
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdf
 
Mpdf 13
Mpdf 13Mpdf 13
Mpdf 13
 
Ado.net vs jpa
Ado.net vs jpaAdo.net vs jpa
Ado.net vs jpa
 

Sqlalchemy declaratif

  • 2. Kesako ? JJ Fonctionnalité implémentée à partir de SQLAlchemy 0.5 JJ Backporté en 0.4 pour nos besoins JJ Nouvelle manière de définir les tables et leurs relations JJ L’avenir de SQLAlchemy ? 1
  • 3. Avantages JJ SQLAlchemy JJ P ermet d’avoir une meilleure visibilité sur la définition de notre base de données JJ Facilite l’écriture de tests 2
  • 4. Définition d’une table Imports nécessaires import sqlalchemy import zope.interface from arsia.db.pgsql import base, DeclarativeBase Interface implémentée par la table class IBovin(zope.interface.Interface): ‘‘‘ Marker interface for bovines ‘‘‘ 3
  • 5. Définition d’une table Définition de la table class 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. Définition d’une table Définition du schéma class Bovin(DeclarativeBase, base.MappedClassBase): ... __tablename__ = u’bovin’ __table_args__ = {‘schema’: ‘cerise’} Définition d’une relation class 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. Définition d’une table Autre manière de définir une relation class Bovin(DeclarativeBase, base.MappedClassBase): ... Bovin.mother = sqlalchemy.orm.relation(Mother, lazy=False, uselist=False) Définition d’un index class Bovin(DeclarativeBase, base.MappedClassBase): ... sqlalchemy.Index( ‘mark_nr_idx’, Bovin.__table__.c.mark_nr) 6
  • 8. Définition d’une table Définition d’une contrainte class Bovin(DeclarativeBase, base.MappedClassBase): ... __tablename__ = u’bovin’ __table_args__ = ( sqlalchemy.CheckConstraint(‘mark_nr != name’, name=’test_constraint’), {‘schema’: ‘cerise’}) # Columns 7
  • 9. Activation de la réflexion des tables Modification de la classe DeclarativeBase try: from sqlalchemy.ext.declarative import DeferredReflection except ImportError: from arsia.db.core.declarative import DeferredReflection DeclarativeBase = sqlalchemy.ext.declarative.declarative_base(cls=DeferredReflection) 8
  • 10. Méthodes et propriétés de bases mapper_instance.session Renvoi la session associée à l’objet courant ou une nouvelle session mapper_instance.asDict(self) Renvoi l’objet courant sous la forme d’un dictionnaire mapper_instance.clone(self) Renvoi une copie de l’objet courant mapper_instance.update(self, flush=True, commit=False) Met à jour l’objet courant dans la DB mapper_instance.insert(self, flush=True, commit=False) Insert l’objet courant dans la DB mapper_instance.save_or_update(self, flush=True, commit=False) Insert ou met à jour l’objet courant dans la DB 9
  • 11. Méthodes et propriétés de base mapper_instance.save mapper_instance.add Aliases de mapper_instance.insert Mapper.exists(cls, **kwargs) Renvoi un booléen si une ligne dans la base de donnée correspond aux filtres données Exemple : Bovin.exists(mark_nr=u’BE12345678’) Mapper.get(cls, **kwargs) Renvoi une liste de résultat qui correspond aux filtres données Exemple d’utilisation : Bovin.get(snun_cde=u’BE12345678-0101’) Mapper.first(cls, **kwargs) Renvoi le premier résultat qui correspond aux filtres données Exemple d’utilisation : Bovin.fist(mark_nr=u’BE12345678’) 10
  • 12. Questions 11
  • 13. Liens JJ 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