2009-10-19 11 views
5

¿Es necesario que dos modelos de SQLAlchemy hereden de la misma instancia de declarative_base() si deben participar en la misma sesión? Es probable que este sea el caso al importar dos o más módulos que definen los modelos de SQLAlchemy.¿Deben dos modelos declarativos SQLAlchemy compartir la misma declarative_base()?

from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 

class SomeClass(Base): 
    __tablename__ = 'some_table' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(50)) 

Base2 = declarative_base() 

class AnotherClass(Base2): 
    __tablename__ = 'another_table' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(50)) 

Respuesta

4

Utilizo con éxito bases declarativas diferentes en una sola sesión. Esto puede ser útil cuando se usan varias bases de datos: cada base se crea con metadatos propios y cada metadato está obligado a separar la base de datos. Algunas de sus bases declarativas podrían definir métodos adicionales o podrían usar otra metaclase para instalar extensiones.

+0

También puede usar una única sesión con el argumento binds = {Class: database, ...}. – joeforker

+0

Claro. Pero tal diccionario vincula es difícil de mantener cuando se vuelve enorme. Mientras digo acerca de construirlo automáticamente desde varios objetos de metadatos. –

2

Las clases base separadas funcionarán bien.

Deberá tener cuidado cuando utilicen conexiones de bases de datos diferentes, en ese caso no puede usar combinaciones en las dos bases de datos; cada consulta debe ir a una base de datos.

Cuestiones relacionadas