在app_context中使用烧瓶init_db与否?有什么区别?

我有多个应用程序,并使用以下样式的flask_sqlalchemy:

from flask import flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
    app = flask(__name__)
    db.init_app(app)
    return app

但是,在测试中,所有应用程序都链接到相同的数据库。

切换到以下样式后。每个应用程序都可以链接到其自己的数据库。

from flask import flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
    app = flask(__name__)
    with app.app_context():
       db.init_app(app)
    return app

我不明白为什么?如果第二种情况更好,为什么不在官方文档中?

信用:我从https://hackingandslacking.com/demystifying-flasks-application-context-c7bd31a53817

复制了第二种样式
as5101 回答:在app_context中使用烧瓶init_db与否?有什么区别?

您创建的每个应用程序都有自己的上下文,使用下面的代码块:

with app.app_context():
   db.init_app(app)

意味着您仅将这些实例初始化为该应用上下文,并尝试在其他位置访问这些实例将导致以下错误。

  

RunTimeError:在应用程序上下文之外工作。

您可以阅读有关Flask应用上下文here

的更多信息
本文链接:https://www.f2er.com/3125894.html

大家都在问