我正在构建一个创建用户的api,每个用户都获得一个新的数据库。我想将flask-sqlalchemy链接到创建的数据库。有没有简单的方法可以做到这一点?
我还想明确指出,每次使用都拥有自己的数据库的原因是要满足法规要求,因此重新安排架构以使所有内容都在一个数据库中是不可能的。
我正在考虑使用此处所述的香草sqlalchemy:https://dev.to/nestedsoftware/flask-and-sqlalchemy-without-the-flask-sqlalchemy-extension-3cf8,但我想确保没有其他选择。
答案 0 :(得分: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()