6

我正在尝试使用烧瓶中的“应用程序工厂”模式,但我的模型似乎存在先有鸡还是先有蛋的问题。http://flask.pocoo.org/docs/patterns/appfactories/

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

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

__table_args__ = { 'schema' : 'other_db_name' }

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

但是...根据配置,“other_db_name”可能会有所不同。

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

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

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

4

1 回答 1

5

我自己从未尝试过,但您可以__table_args__通过将其设为declared_attr.

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'] }
于 2013-08-27T01:20:14.020 回答