flask-sqlalchemy 出现报错RuntimeError: Working outside of application context. 应该如何解决

当在Flask中使用Flask-SQLAlchemy时,出现"RuntimeError: Working outside of application context"错误通常是因为在应用上下文之外执行了与数据库相关的操作。

要解决这个问题,你可以使用current_app.app_context()上下文管理器将代码包装在应用上下文中,以确保在应用上下文中执行数据库操作。以下是一个示例:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'your_database_uri'
db = SQLAlchemy(app)

def perform_database_operation():
    with app.app_context():
        # 在这个块中执行与数据库相关的操作
        # 例如,可以执行查询、插入、更新等操作
        result = db.session.query(MyModel).all()
        for item in result:
            print(item)
            
# 在应用上下文之外执行数据库操作会引发错误
# perform_database_operation() 

# 使用应用上下文执行数据库操作
with app.app_context():
    perform_database_operation()

在上述示例中,我们使用了current_app.app_context()上下文管理器,将perform_database_operation()函数包装在应用上下文中。这样,函数内部的数据库操作将在应用上下文中执行,从而避免了 “Working outside of application context” 错误。

请注意,在Flask中,只有在应用上下文中才能执行与数据库相关的操作。因此,在执行这些操作之前,确保你处于应用上下文中。