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

Flask+SQLite开发CRUD项目时点击删除按钮无法删除记录怎么解决

问题修复方案

你代码里共有4处核心错误导致删除功能失效,按以下步骤修改即可:

错误1:视图函数参数与数据获取逻辑错误

delete函数定义了必填参数book,但路由没有对应路径参数,同时你没有从表单中读取提交的书籍名称,需要修改为从request.form获取值,同时删除函数的入参。

错误2:SQL执行参数格式不符合SQLite要求

SQLite的execute方法第二个参数必须是元组,单个参数需要加逗号声明为元组,否则字符串会被拆分为单个字符匹配,无法命中记录。

错误3:表单提交路径与路由规则不匹配

你在操作页面的表单action为空,默认提交到当前访问路径,如果你是在/view页面打开的表单,该路由仅支持GET请求,POST请求会被直接拒绝,需要明确指定表单提交地址。

错误4:缺少更新操作的处理逻辑

当前仅实现了删除的判断分支,提交update按钮的请求无对应处理。


修复后完整代码

app.py

from flask import Flask, render_template, g, request, redirect, url_for
import sqlite3

app = Flask(__name__)

def connect_db():
    connection = sqlite3.connect('./books.db')
    connection.row_factory = sqlite3.Row
    return connection

def get_db():
    if not hasattr(g, 'sqlite_db'):
        g.sqlite_db = connect_db()
    return g.sqlite_db

# 关闭请求时自动释放数据库连接
@app.teardown_appcontext
def close_db(error):
    if hasattr(g, 'sqlite_db'):
        g.sqlite_db.close()

@app.route("/")
def main():
    return render_template('book.html')   

# 统一处理增改删的POST请求
@app.route('/', methods=['POST'])
def handle_form():
    db = get_db()
    book = request.form.get('book')
    # 书籍名称为空直接返回
    if not book:
        return redirect(url_for('main'))
    # 删除逻辑
    if request.form.get('submit') == 'delete':
        db.execute("delete from books where book = ?", (book,))
        db.commit()
    # 新增/更新逻辑
    elif request.form.get('submit') == 'update':
        author = request.form.get('author')
        category = request.form.get('category')
        db.execute("insert or replace into books (book, author, category) values (?, ?, ?)", (book, author, category))
        db.commit()
    return redirect(url_for('view'))
   
@app.route('/view', methods=["GET"])
def view():
    db = get_db()
    cursor = db.execute('select * from books')
    rows = cursor.fetchall()
    return render_template('view.html', rows=rows)

if __name__ == '__main__':
    app.run(debug=True)

操作页面(book.html,你之前贴的操作页代码调整后如下)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>书店管理</title>
</head>
<body>
 <h1> 书籍记录增删操作 </h1>
<!-- 明确指定提交到根路径的POST处理路由 -->
<form action="/" method="POST" >
   <label for="book">书籍名称</label>
          <input type="text" id="book" name="book" required><br><br>
   <label for="author">作者</label>
          <input type="text" id="author" name="author"><br><br>
   <label for="category">书籍分类</label>
         <select name="category" id="category">
             <option value></option>
             <option value="Fiction">小说</option>
             <option value="Non-Fiction">非虚构</option>
             <option value="Business">商业管理</option>
             <option value="Biography">传记</option>
         </select><br><br>
    <button type="submit" name="submit" value="update">更新/新增</button>
   <button type="submit" name="submit" value="delete">删除</button>
</form>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:57:03