首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-Sqlalchemy动态绑定

Flask-Sqlalchemy动态绑定
EN

Stack Overflow用户
提问于 2019-05-25 16:08:54
回答 1查看 526关注 0票数 2

我有以下config.py:

代码语言:javascript
复制
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///' + os.path.join(basedir, 'master.db')
SQLALCHEMY_BINDS = {
    'project0':        'sqlite:///' + os.path.join(basedir, 'project0.db')
    'project1':        'sqlite:///' + os.path.join(basedir, 'project1.db')
    'project2':        'sqlite:///' + os.path.join(basedir, 'project2.db')

    }

我需要我的用户在登录时选择一个项目数据库。我希望将此选择存储在某个变量中,并将其传递给模型类。

代码语言:javascript
复制
class Punchlist(db.Model,choice):
    __bind_key__ = choice

将使用__init.py中的默认数据库初始化db对象:

代码语言:javascript
复制
app.config.from_object(Config)
db = SQLAlchemy(app)

将此选择与用户关联的最佳方式是什么?

EN

回答 1

Stack Overflow用户

发布于 2021-04-23 20:12:50

您可以创建一个包含bind_key变量的基类。例如:

代码语言:javascript
复制
class Base(db.Model):
    __abstract__ = True

    def __init__(self, **kwargs):
        self.bind_key = kwargs.pop('bind_key') if kwargs.get('bind_key') else 'project0'
        db.Model.metadata.tables[self.__tablename__].info['bind_key'] = self.bind_key
        super(Base, self).__init__(**kwargs)

派生类

代码语言:javascript
复制
class PunchList(Base):
   __tablename__ = 'Punchlist'

初始化PunchList类

代码语言:javascript
复制
punch_list_0 = PunchList()
punch_list_1 = PunchList(bind_key='project1')
punch_list_2 = PunchList(bind_key='project2')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56303013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档