两个SQLAlchemy声明模型必须共享相同的declarative_base()吗?

8 投票
2 回答
3667 浏览
提问于 2025-04-15 15:11

如果两个SQLAlchemy模型需要在同一个会话(Session)中一起使用,它们是否必须都继承自同一个declarative_base()的实例?这种情况通常发生在导入两个或多个定义了SQLAlchemy模型的模块时。

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))

2 个回答

4

不同的基础类可以正常工作。

不过,当它们使用不同的数据库连接时,你需要小心。这种情况下,你不能在两个数据库之间进行连接查询——每次查询都必须只针对一个数据库。

5

我成功地在一个会话中使用了不同的声明性数据库。这在使用多个数据库时很有用:每个数据库都有自己的元数据,而这些元数据又和各自的数据库绑定在一起。你的一些声明性数据库可能会定义额外的方法,或者它们可能会使用其他的元类来安装扩展功能。

撰写回答