【问题标题】:Dynamically linking to databases using flask-sqlalchemy使用 flask-sqlalchemy 动态链接到数据库
【发布时间】:2019-11-06 16:09:45
【问题描述】:

我正在构建一个创建用户的 api,每个用户都会获得一个新数据库。我想将 flask-sqlalchemy 链接到创建的数据库。有没有简单的方法可以做到这一点?

我还想明确指出,每个用户拥有自己的数据库的原因是为了满足法规,因此重新安排架构以使所有内容都在一个数据库中是不可行的。

我正在考虑使用 vanilla sqlalchemy,如下所述:https://dev.to/nestedsoftware/flask-and-sqlalchemy-without-the-flask-sqlalchemy-extension-3cf8 但我想确保我没有其他选择。

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    在不发布整个代码的情况下,我使用 Flask-SQLalchemy 拥有动态数据库的关键概念是:

    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy()
    

    拥有一个全局数据库注册表

    DATABASE_REGISTRY = {}
    SESSION_MAKER = db.sessionmaker()
    

    创建数据库引擎并添加到注册表(我在另一个辅助函数中有这个)

    engine = db.create_engine(db_uri)
    DATABASE_REGISTRY['username'] = { 'engine': engine}
    

    然后动态获取用户数据库,有一个辅助函数

    def get_db_session(username):
        db_session = SESSION_MAKER(bind=DATABASE_REGISTRY.get(username)['engine'])
        return db_session
    

    那么你可以使用:

    db_session = get_db_session('user_bob')
    
    bob_query = db_session.query(ATable).all()
    

    别忘了关闭会话

    db_session.close()
    

    【讨论】:

    • 谢谢,这是最有帮助的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2016-08-21
    • 1970-01-01
    • 2018-06-13
    • 2021-11-02
    • 2018-02-09
    • 2020-02-17
    相关资源
    最近更新 更多