我创建了一个小型的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
你需要在创建flask应用后给它一个上下文。这在视图函数中会自动完成,但在这些函数之外,你需要在创建应用后完成。
app.app_context().push()
请看文档: https:/flask-sqlalchemy.palletsprojects.comen2.xcontexts。