Flask创建SQLite数据库报错:NameError: name 'app' is not defined
问题解决方法
核心问题分析
你遇到的NameError和数据库创建失败,主要有两个关键原因:
Todo模型没有继承db.Model,Flask-SQLAlchemy无法识别这是数据库模型- 使用
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交互环境操作:
- 打开终端,进入项目根目录
- 运行
python进入交互模式 - 执行以下命令:
from app import app, db with app.app_context(): db.create_all()
执行完成后退出交互环境,项目目录下就会生成test.db文件。
内容的提问来源于stack exchange,提问作者raboba2re
相关产品推荐
相关产品推荐

