我正在通过分散模型和蓝图来重构我的Flask应用程序,但是我遇到了运行时错误。
def create_app():
app = flask.Flask("app")
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
app.register_blueprint(api)
db.init_app(app)
db.create_all()
return app
我有以下问题(示例项目托管在此处:https://github.com/chfw/sample):
Traceback (most recent call last):
File "application.py", line 17, in <module>
app = create_app()
File "application.py", line 12, in create_app
db.create_all()
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 856, in create_all
self._execute_for_all_tables(app, bind, 'create_all')
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 836, in _execute_for_all_tables
app = self.get_app(app)
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 809, in get_app
raise RuntimeError('application not registered on db
'RuntimeError: application not registered on db
instance and no application bound to current context
我对这个主题进行了研究。在这里建议使用重新构建:
Flask-SQLAlchemy import/context issue
同样的问题在这里提出:
上面的主题(2010)建议使用以下hack方法:
app.register_blueprint(api)
db.app=app #<------------<<
db.init_app(app)
有人知道如何正确地做吗?你是如何解决的?
谢谢
app
属性并不是公共设计的。当该对象更改其使用的应用程序时,该对象可能需要执行其他操作。其次,app_context
不仅仅是更改 Flask-SQLAlchemy;它实际上告诉 Flask 更改当前应用程序。因此,您可能需要使用它来处理各种 Flask API 或与所有其他 Flask 扩展一起使用应用程序。 - Mark Hildreth