Flask应用连接SQLite报错:sqlite3.OperationalError: no such table
Flask + SQLite 连接问题求助
我正在学习Flask完成新任务,尝试用SQLite实现数据库连接。已经创建了schema.sql、init_db.py、app.py及模板文件,运行init_db.py无报错,但启动Flask应用时出现sqlite3.OperationalError: no such table错误。同时我在Flask数据库连接和表单创建方面存在困惑,希望获得相关学习建议。
相关文件内容
schema.sql
DROP TABLE IF EXISTS posts; CREATE TABLE posts ( id INTEGER PRIMARY KEY AUTOINCREMENT, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, title TEXT NOT NULL, content TEXT NOT NULL );
init_db.py
import sqlite3 connection = sqlite3.connect('database.db') with open('schema.sql') as f: connection.executescript(f.read()) cur = connection.cursor() cur.execute("INSERT INTO posts (title, content) VALUES (?, ?)", ('First Post', 'Content for the first post') ) cur.execute("INSERT INTO posts (title, content) VALUES (?, ?)", ('Second Post', 'Content for the second post') ) connection.commit() connection.close()
app.py
from flask import Flask, render_template , request , redirect, url_for import sqlite3 app = Flask(__name__) def get_db_connection(): conn = sqlite3.connect('database.db') conn.row_factory = sqlite3.Row return conn @app.route('/db') def index(): conn = get_db_connection() posts = conn.execute('SELECT * FROM posts').fetchall() conn.close() return render_template('index.html', posts=posts)
模板文件(index.html)
{% extends "base.html" %} {% block title %} db Page {% endblock %} {% block content %} <h1>{% block title %} Posts {% endblock %}</h1> {% for post in posts %} <div class='post'> <p>{{ post['created'] }}</p> <h2>{{ post['title'] }}</h2> <p>{{ post['content'] }}</p> </div> {% endfor %} {% endblock %}
问题排查建议
- 检查
database.db路径:Flask启动时会从当前终端所在目录查找数据库文件,而你运行init_db.py的目录可能和启动Flask的目录不一致,导致两个操作生成的数据库文件不在同一位置。建议给数据库文件指定绝对路径,比如sqlite3.connect('/your/project/path/database.db'),确保两个脚本指向同一个数据库。 - 手动验证数据库:用SQLite命令行工具打开
database.db,执行.tables命令查看是否存在posts表,确认init_db.py确实成功创建了表和插入数据。 - 确认Flask实例路径:在
app.py中添加print(app.instance_path),查看Flask默认的实例目录,若需要将数据库放在此目录下,需调整连接路径为sqlite3.connect(app.instance_path + '/database.db')。
学习建议
- 数据库连接:优先使用
Flask-SQLAlchemy扩展,它封装了SQLAlchemy ORM,简化了数据库连接、查询、事务管理等操作,比直接用原生sqlite3更适合Flask项目。 - 表单处理:使用
Flask-WTF扩展,它基于WTForms实现了表单验证、CSRF防护等核心功能,能大幅减少手动处理表单的代码量。 - 官方资源:Flask官方文档包含数据库集成、表单处理的详细教程,是最权威的学习资料。
- 项目实践:从简单的博客、待办清单等小型项目入手,逐步实践数据库操作和表单功能,通过实际代码加深理解。
内容的提问来源于stack exchange,提问作者Yassine Krout
相关产品推荐
相关产品推荐

