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

Flask创建SQLite数据库报错:NameError: name 'app' is not defined

问题解决方法

核心问题分析

你遇到的NameError和数据库创建失败,主要有两个关键原因:

  1. Todo模型没有继承db.Model,Flask-SQLAlchemy无法识别这是数据库模型
  2. 使用db.init_app(app)的延迟初始化方式时,创建数据库需要手动推入Flask应用上下文

另外你写错了导入语句,正确的导入语法是from app import db,不是import db from app。

代码修正步骤

1. 修正模型类

把Todo类修改为继承db.Model:

class Todo(db.Model):  # 新增db.Model继承
    id = db.Column(db.Integer(), primary_key=True)
    content = db.Column(db.String(length=300), nullable=False)
    date_created = db.Column(db.DateTime, default=datetime.utcnow)

    def __repr__(self):
        return '<Task %r>' % self.id

2. 自动创建数据库(推荐)

在启动app的代码块中,添加上下文并执行表创建:

if __name__ == "__main__":
    with app.app_context():
        db.create_all()  # 在应用上下文内创建所有表
    app.run(debug=True)

这样每次启动Flask应用时,会自动检查并生成test.db文件(如果不存在)。

3. 手动在交互环境创建数据库

如果不想修改启动代码,也可以通过Python交互环境操作:

  1. 打开终端,进入项目根目录
  2. 运行python进入交互模式
  3. 执行以下命令:
from app import app, db
with app.app_context():
    db.create_all()

执行完成后退出交互环境,项目目录下就会生成test.db文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:05:19