当前位置: 首页 > 面试题库 >

散布flask模型时,引发RuntimeError:“未在数据库上注册应用程序”

衡高寒
2023-03-14
问题内容

我通过分散模型,蓝图来重构我的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的应用程序上下文有关。当使用初始化时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-SQLAlchemy导入/上下文问题 这里也提出了同样的问题: http://flask.pocoo.org/mailinglist/archive/201

  • 问题内容: 我正在学习平均堆栈,当我尝试使用启动服务器时 我有一个例外说: 这是我在/models/Posts.js中的代码 如我所见,应该为模型“ Post”注册架构,但是什么原因可能导致引发异常? 提前致谢。 编辑: 这是异常错误 这是带有猫鼬初始化的app.js代码: 前行: 问题答案: 模型导出不是问题。我遇到过同样的问题。 真正的问题是需要模型声明 低于路线依赖关系。只需将mongoDB

  • 我正试图在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

  • 问题内容: 此模块是“请求https://github.com/mikeal/request 我想我正在遵循每个步骤,但我错过了一个论点。 另一方面,我有 而且我知道php没错… 问题答案: 编辑: 您应该签出Needle。它为您做到了这一点,并支持多部分数据,以及更多。 我发现我缺少标题