我通过分散模型,蓝图来重构我的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导入/上下文问题
这里也提出了同样的问题:
http://flask.pocoo.org/mailinglist/archive/2010/8/30/sqlalchemy-init-app-
problem/#b1c3beb68573efef4d6e571ebc68fa0b
上面的线程(2010)提出了这样的黑客:
app.register_blueprint(api)
db.app=app #<------------<<
db.init_app(app)
有人知道如何正确执行此操作吗?您是如何解决的?
谢谢
这与Flask的应用程序上下文有关。使用初始化时db.init_app(app)
,Flask-
SQLAlchemy不知道哪个应用程序是“当前”应用程序(请记住,Flask允许在同一解释器中使用多个应用程序)。您可能有多个应用程序SQLAlchemy
在同一进程中使用相同的实例,并且Flask-
SQLAlchemy将需要知道哪个是“当前”应用程序(由于Flask的上下文上下文是所有事物的本地性质)。
如果需要在运行时执行此操作,则必须明确说明哪个应用程序是所有调用的“当前”应用程序。您可以通过将代码更改为使用with app.app_context()
块来做到这一点:
def create_app():
app = flask.Flask("app")
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
app.register_blueprint(api)
db.init_app(app)
with app.app_context():
# Extensions like Flask-SQLAlchemy now know what the "current" app
# is while within this block. Therefore, you can now run........
db.create_all()
return app
如果要编写需要应用程序上下文的独立脚本,则可以在开始时推送上下文,而不是将所有内容放在一个with
块中。
create_app().app_context().push()
如果您为Flask的cli编写命令,则该命令将自动访问上下文。
问题内容: 我通过分散模型,蓝图来重构我的Flask应用程序,但是我遇到了运行时错误。 我有以下问题(示例项目托管在这里:https : //github.com/chfw/sample): 问题答案: 这与Flask的应用程序上下文有关。当使用初始化时,Flask-SQLAlchemy不知道哪个应用程序是“当前”应用程序(请记住,Flask允许在同一解释器中使用多个应用程序)。你可能有多个应用程
问题内容: 我正在学习平均堆栈,当我尝试使用启动服务器时 我有一个例外说: 这是我在/models/Posts.js中的代码 如我所见,应该为模型“ Post”注册架构,但是什么原因可能导致引发异常? 提前致谢。 编辑: 这是异常错误 这是带有猫鼬初始化的app.js代码: 前行: 问题答案: 模型导出不是问题。我遇到过同样的问题。 真正的问题是需要模型声明 低于路线依赖关系。只需将mongoDB
在尝试注册cosmos db changefeed时,ChangeFeedEventHost引发错误“java.lang.UnsupportedOperationException:PartitionKey值必须为此操作提供”。 https://github.com/azure/azure-documentdb-changeFeedProcessor-java/blob/master/sample
我正试图在Tomcat 7.0.34.0上使用Servlet3.0应用程序类开发一个RESTful webapp,但似乎没有任何工作。我对以前的应用程序使用Jersey ServletContainer方法并在web.xml中声明所有REST服务没有任何问题。 我的当前应用程序子类: 和web服务: 当我尝试部署应用程序时,Tomcat告诉我上下文已重新加载: web应用程序本身已经部署(我可以访
问题内容: app.py test.py 我正在将 应用程序 导入到 test.py中 以进行单元测试。在将’ before_request ‘函数调用到test.py中时,它会抛出RuntimeError:在应用程序上下文之外工作同样会在调用’ input_info() ‘时发生 问题答案: Flask有一个Application Context ,似乎您需要执行以下操作: 您可能还可以将调用推
该应用程序在Eureka注册后以“未知”的状态启动,并且从未更改为“启动”。如果这些标志中的任何一个被设置为false,那么应用程序启动时注册为“up”。 当两个标志都启用/true时,我看到了以下一系列日志记录: 我如何让应用程序注册为启用了这两个标志/真? bootstrap.yml