首页 文章

flask-sqlalchemy交叉数据库,带有“动态”架构

提问于
浏览
4

我试图使用烧瓶中的"application factory"模式,但我的模型似乎有鸡和蛋的问题 . http://flask.pocoo.org/docs/patterns/appfactories/

我在create_app函数中导入我的视图,该函数导入我的模型 . 因此,在定义模型时,我在应用程序中没有配置 . 这通常很好,使用绑定键,我可以设置模型连接到不同的dbs .

但是,在这种情况下,我有两组模型,一组来自默认数据库,另一组是另一个数据库连接 - 我想交叉数据库连接 . 我知道通常的方法是添加

__table_args__ = { 'schema' : 'other_db_name' }

到我的“其他数据库”模型 .

但是......取决于配置,'other_db_name'可能不同 .

所以,现在我定义的模型需要配置中的模式名称,但配置中没有模式放入类定义中 . 我也可能只是遗漏了一些我不知道的烧瓶 .

(旁注 - 一个简单的解决方法是将Sqlalchemy配置为始终在查询中输出模式名称,无论如何 - 但我似乎无法找到此设置 . )

如果有人对此有任何意见,我将非常感激 . 谢谢!

1 回答

  • 3

    从来没有尝试过这个,但你可以通过使它成为 declared_attr 来强迫 __table_args__ 进行懒惰评估 .

    from sqlalchemy.ext.declarative import declared_attr
    
    class MyModel(MySQLSettings, MyOtherMixin, Base):
        __tablename__='my_model'
    
        @declared_attr
        def __table_args__(cls):
            return { 'schema': current_app.config['OTHER_DB_NAME'] }
    

相关问题