首页 > 解决方案 > 使用 flask-sqlalchemy 动态链接到数据库

问题描述

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

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

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

标签: pythonflasksqlalchemyflask-sqlalchemy

解决方案


在不发布整个代码的情况下,我使用 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()

推荐阅读