在视图函数之外访问Flask-SQLAlchemy数据库。

问题描述 投票:0回答:1

我创建了一个小型的Flask应用程序,它的数据存储在一个sqlite数据库中,我通过flask-sqlalchemy来访问。

然而,当我运行它时,我得到以下错误。RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.

我已经调试了我的应用程序,现在知道这个错误源于这两个函数。```def user_exists(email): if User.query.filter_by(email = email).count() == 0: return False else: return True.

def get_user(email): user = User.query.filter_by(email = email).first() return user```。

现在我在想。是否不可能通过flask -sqlalchemy在视图函数之外访问数据库?

为了进一步了解情况,我添加了配置flask应用的文件。

presentio.py

from app import create_app

app = create_app(os.getenv("FLASK_CONFIG", "default"))

应用程序启动.py

from flask_mail import Mail
from flask_sqlalchemy import SQLAlchemy
from config import config

mail = Mail()
db = SQLAlchemy()


def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    mail.init_app(app)
    db.init_app(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix = "/auth")

    from .text import text as text_blueprint
    app.register_blueprint(text_blueprint, url_prefix = "/text")

    return app

python database flash sqlalchemy flask-sqlalchemy
1个回答
0
投票

你需要在创建flask应用后给它一个上下文。这在视图函数中会自动完成,但在这些函数之外,你需要在创建应用后完成。

app.app_context().push()

请看文档: https:/flask-sqlalchemy.palletsprojects.comen2.xcontexts。

© www.soinside.com 2019 - 2024. All rights reserved.