sqlalchemy 动态绑定到模型

gCo*_*Coh 5 python postgresql sqlalchemy

我正在寻找一种将模型绑定到不同数据库的方法(所有数据库中的架构都是相同的),例如 - 按国家/地区分隔

class User():
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True)
    name = Column(VARCHAR(255))
    age = Column(Integer)
Run Code Online (Sandbox Code Playgroud)

该模型在多个数据库之间共享:

postgresql://postgres:@localhost/US

postgresql://postgres:@localhost/RU

使用 Flask 可以进行多个绑定:Flask-SQLAlchemy 多个数据库并绑定,但绑定密钥在模型中硬编码 http://flask-sqlalchemy.pocoo.org/2.1/binds/

有没有办法将其动态绑定到模型?

Sam*_*man 1

有关 sqlalchemy 如何选择绑定表的完整文档,请参阅sqlalchemy 文档的get_bind方法。

忽略 Flask,我的建议是根据您想要访问的国家/地区在会话对象上设置绑定参数。例如,假设 sess 是您的会话对象。你可以执行

sess.bind = choose_bind_from_request_data(r)
Run Code Online (Sandbox Code Playgroud)

您需要确保更改绑定时会话没有活动事务,尽管创建新会话并设置绑定而不是更改现有会话上的绑定会是更好的设计。

动态选择每表绑定看起来并不容易,尽管如上所述动态每会话绑定很容易。