SQLAlchemy ORM:能否将类实例映射至动态创建的数据库模式?
在SQLAlchemy 2.0中实现运行时动态映射至PostgreSQL多模式表
我计划把应用迁移到SQLAlchemy(它的功能比自研ORM强很多),但目前看到的官方示例都是在类声明阶段固定模式名,没办法实现运行时动态设置。我的具体需求是:
- 要将类实例映射到PostgreSQL的多模式表中,应用会在运行时创建新的数据库模式,新的类实例需要对应到这个新模式下的表
- 自研ORM当前的实现逻辑:类声明里不带任何模式信息,创建实例时传入模式名,实例自身持有该模式名,生成SQL时自动包含;支持同时操作多个模式,还能在其他模式的表中创建指向public模式主表的外键,实现级联删除
以下是SQLAlchemy官方给出的相关示例:
Core层面表级设置模式的示例
metadata_obj = MetaData(schema="remote_banks") financial_info = Table( "financial_info", metadata_obj, Column("id", Integer, primary_key=True), Column("value", String(100), nullable=False), )
ORM层面绑定已构造表的示例
metadata = MetaData() group_users = Table( "group_users", metadata, Column("user_id", String(40), nullable=False), Column("group_id", String(40), nullable=False), UniqueConstraint("user_id", "group_id"), ) class Base(DeclarativeBase): pass class GroupUsers(Base): __table__ = group_users __mapper_args__ = {"primary_key": [group_users.c.user_id, group_users.c.group_id]}
核心疑问
在SQLAlchemy 2.0(测试版)中,能否实现将类实例映射至运行时动态创建的数据库模式的表/行?不接受通过修改连接设置当前模式的方式,必须支持同时操作所有模式。
内容的提问来源于stack exchange,提问作者Ostap
相关产品推荐
相关产品推荐

