You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask应用工厂模式下外部文件访问SQLite报上下文错误如何解决

错误原因

get_db方法依赖Flask应用上下文内的全局变量g,默认只有处理HTTP请求时Flask会自动激活上下文,你当前是在定时任务这类脱离HTTP请求流程的独立逻辑中调用数据库接口,没有可用的应用上下文,因此触发报错。

解决方法

手动初始化应用实例并推送应用上下文即可,修改alerts.py代码如下:

from flaskr import create_app
from flaskr.db import get_db

# 全局初始化一次应用实例,避免频繁调用时重复创建开销
app = create_app()

def get_data_from_db():
    # 手动推送应用上下文,上下文范围内可以正常调用get_db等依赖Flask上下文的方法
    with app.app_context():
        db = get_db()
        user_from_db = db.execute(
            'SELECT name FROM user'
        ).fetchall()
        return user_from_db

如果你的函数是在请求处理流程中被视图函数调用,不需要手动加上下文,Flask会在收到请求时自动创建并激活上下文,只有定时任务、自定义CLI命令、独立运行的脚本这类脱离请求流程的逻辑才需要手动处理上下文。

内容的提问来源于stack exchange,提问作者Justin Besteman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 14:03:03