фляга init_db в app_context против нет? в чем разница? - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть несколько приложений, и я использую 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

Я не понял, почему? Если второй случай лучше, почему его нет в официальном документе?

credit: я скопировал второй стиль из https://hackingandslacking.com/demystifying-flasks-application-context-c7bd31a53817

1 Ответ

0 голосов
/ 11 ноября 2019

Каждое создаваемое вами приложение имеет собственный контекст, используя приведенный ниже блок кода:

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

означает, что вы инициализируете эти экземпляры только для этого контекста приложения, и попытка получить доступ к этим экземплярам где-то еще приведет кв приведенной ниже ошибке.

RunTimeError: Работа вне контекста приложения.

Подробнее о контексте приложения Flask можно прочитать здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...