好的,我正在尝试用Flask应用程序做一些有点深奥的事情。
我想在模型结构中有一些基于配置文件中信息的条件逻辑。
目前,当我调用Flask App时,配置对象的指定方式如下:
app = create_app('swarm.settings.DevConfig')
db对象是在models.py
:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class MyClass(db.Model):
...
我希望models.py能够容纳各种ORM和OGM(不限于SQLAlchemy和py2neo),这样我就可以开发一个与SQL / Graph无关的Flask应用程序。
if __SOME_CONFIG__['db_mapper'] = 'SQLAlchemy':
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class MapperModel(db.Model):
...
elif __SOME_CONFIG__['db_mapper'] = 'Py2Neo':
from py2neo import Graph, Node, Relation
db = Graph()
class MapperModel(py2neo.Node):
...
class MyClass(MapperModel):
...
我看不到使用current_app
来实现此目的的方法,因为我在代码知道app对象之前创建了我的db对象。
是否有一种从models.py
内部加载当前配置对象的简单方法?我是否应该在不引用应用程序当前配置对象的情况下从单独的文件中加载models.py
中的配置?
答案 0 :(得分:0)
创建一个返回db对象的函数,并在实例化flask应用程序时初始化该对象:
app = create_app(...)
db = create_dbobject('someconfig')
def create_dbobject(someconfig):
if someconfig == 'Py2Neo':
return Py2Neo()
#default to sqlchemy
return SQLAlchemy()
所以不用担心扩展初始化了。在应用程序存在的地方保持扩展初始化是很好的。