我试图从烧瓶使用“应用程序工厂”模式,但我似乎有与我的模型鸡与鸡蛋问题。 http://flask.pocoo.org/docs/patterns/appfactories/flask-sqlalchemy与“动态”模式的交叉数据库
我在导入我的模型的create_app函数中导入我的视图。所以,当我的模型被定义时,我没有在应用程序中的配置。这通常很好,使用绑定键,我可以设置模型以连接到不同的dbs。
但是,在这种情况下,我有两组模型,一组来自默认数据库,另一组设置在另一个数据库连接 - 我想交叉db连接。我知道通常的方法是添加到我的“其他数据库”模型
__table_args__ = { 'schema' : 'other_db_name' }
。
但是...取决于配置,'other_db_name'可能不同。
所以,现在我已经定义了模型,它需要配置中的模式名称,但是没有配置中的模式来放入类定义中。我也可能只是在我不知道的烧瓶中遗漏了一些东西。
(附注 - 一个简单的办法,这是在查询配置的SQLAlchemy总是输出模式名,不管是什么 - 但我似乎无法找到这个设置。)
如果任何人对此有任何意见,我会非常感激。谢谢!
这是一个好主意,但似乎并不奏效。它看起来像声明基地仍然在定义上查找__table_args__,当我到达那里时,我仍然不在应用程序上下文中。谢谢回复! – Hoopes
您应该调查为什么这不起作用。 SQLAlchemy文档多次提到'__table_args__'使用'declared_attr'。例如,参见[这里](http://docs.sqlalchemy.org/en/rel_0_8/orm/extensions/declarative.html#combining-table-mapper-arguments-from-multiple-mixins)。 – Miguel
是的,我同意你的看法,我应该可以使用__table_args__这个函数 - 但是在调用declared_attr来设置表参数的时候,我还没有设置配置(通过应用程序上下文)。所以 - 我不认为这是懒惰的评估,超出烧瓶应用程序启动...... – Hoopes