sqlalchemy动态绑定到模型

时间:2017-05-16 12:01:41

标签: python postgresql sqlalchemy

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

class User():
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True)
    name = Column(VARCHAR(255))
    age = Column(Integer)

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

的PostgreSQL:// postgres的:@本地/ US

的PostgreSQL:// postgres的:@本地/ RU

使用flask:Flask-SQLAlchemy multiple databases and binds可以进行多次绑定,但绑定键在模型中是硬编码的 http://flask-sqlalchemy.pocoo.org/2.1/binds/

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

2 个答案:

答案 0 :(得分:1)

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

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

sess.bind = choose_bind_from_request_data(r)

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

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

答案 1 :(得分:1)