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

Flask待办应用运行报sqlite3 no such table错误如何解决

错误原因
  • @app.before_first_request装饰的建表函数create_tables缩进错误,被嵌套在delete路由函数内部,不会被Flask框架加载执行,应用启动时不会自动创建数据库表。
  • 手动执行建表的db.create_all()代码写在被注释的if __name__ == "__main__"代码块中,同样不会触发执行。

两项问题共同导致SQLite数据库中未生成todo表,访问应用查询数据时报表不存在错误。

解决方案

方案一:修正自动建表逻辑

调整app.py代码缩进,将create_tables函数移到全局作用域,确保装饰器生效:

# 原有delete路由函数保持不变
@app.route("/delete/<int:todo_id>")
def delete(todo_id):
    todo = Todo.query.filter_by(id=todo_id).first()
    db.session.delete(todo)
    db.session.commit()
    return redirect(url_for("home"))

# 以下代码移出delete函数,放在全局位置
@app.before_first_request
def create_tables():
    db.create_all()

修改完成后重新启动应用即可自动创建表。

方案二:手动建表

如果选择保留原有代码结构,可通过Flask shell手动执行建表操作:

  1. 终端进入项目虚拟环境,执行命令进入Flask shell:
flask shell
  1. 在shell交互界面执行以下代码完成建表:
from app import db, app
with app.app_context():
    db.create_all()
exit()
  1. 重新执行flask run启动应用即可正常访问。

注意事项

如果项目目录下已经生成了空的db.sqlite文件,建议先删除该文件再执行建表操作,避免残留文件导致异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:15:01