2009-10-19 30 views
5

如果两个SQLAlchemy模型必须参与相同的会话,是否需要从declarative_base()的同一实例继承?导入两个或多个定义SQLAlchemy模型的模块时,情况可能如此。必须有两个SQLAlchemy声明模型共享相同的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)) 

回答

4

我在单个会话中成功使用了不同的声明基础。这在使用多个数据库时很有用:每个基本都使用自己的元数据创建,每个元数据绑定到单独的数据库。您的某些声明性基础可以定义其他方法,或者可以使用其他元类来安装扩展。

+0

您也可以使用带有binds = {Class:database,...}参数的单个Session。 – joeforker 2009-10-19 18:30:05

+0

当然。但是,这种绑定字典在变得庞大时很难维护。虽然我说从几个元数据对象自动构造它。 – 2009-10-20 03:52:03

2

单独的基类将工作得很好。

当你使用不同的数据库连接时,你必须小心,在这种情况下,你不能在两个数据库中使用连接 - 每个查询都需要到一个数据库。

相关问题