使用flask-sqlalchemy动态链接到数据库

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

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

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

zbrabbit 回答:使用flask-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()
本文链接:https://www.f2er.com/3150622.html

大家都在问