我正在尝试使用烧瓶中的“应用工厂”模式,但我的模型似乎有鸡与蛋的问题。 http://flask.pocoo.org/docs/patterns/appfactories/
我在create_app函数中导入我的视图,该函数导入我的模型。因此,在定义模型时,我在应用程序中没有配置。这通常很好,使用绑定键,我可以设置模型连接到不同的dbs。
但是,在这种情况下,我有两组模型,一组来自默认数据库,另一组是另一个数据库连接 - 我想交叉数据库连接。我知道通常的方法是添加
__table_args__ = { 'schema' : 'other_db_name' }
到我的“其他数据库”模型。
但是......根据配置,'other_db_name'可能会有所不同。
所以,现在我定义的模型需要配置中的模式名称,但配置中没有模式放入类定义中。我也可能只是遗漏了一些我不知道的烧瓶。
(旁注 - 对此的一个简单解决方法是将Sqlalchemy配置为始终在查询中输出模式名称,无论如何 - 但我似乎无法为此找到设置。)
如果有人对此有任何意见,我将非常感激。谢谢!
答案 0 :(得分:3)
我自己从未尝试过,但您可以通过__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'] }