如何在Sqlite中删除记录

2 投票
1 回答
4212 浏览
提问于 2025-04-17 05:25

我正在通过Flask的教程应用学习Python,但我不知道怎么引用数据库中的某一行。我想通过模板中的删除链接来删除一条记录。我花了一整天尝试各种方法,想要真正理解这个过程。我知道这很简单,但我就是搞不懂!

这是我的html模板:

<ul class=entries>
{% for entry in entries %}
<li><h2>{{ entry.title }}
<h2>{{ entry.text|safe }}</h2>
{% if session.logged_in %}
<a href="{{ url_for('delete_entry') }}">Delete</a>
{% endif %}
{% else %}
{% endfor %}
</ul>

你可以看到,每个条目旁边都有一个删除链接。我应该怎么引用数据库中的正确id呢?

这是我目前写的Python函数:

@app.route('/delete')
def delete_entry():
if not session.get('logged_in'):
    abort(401)
g.db.execute('delete from entries where id=(select max(id)from entries)') 
g.db.commit()
flash('The entry was deleted')
return redirect(url_for('show_entries'))

我现在的代码可以运行,但不是我想要的效果。提前谢谢你们!

1 个回答

5

Sebastien,delete_entry这个函数正在删除数据库中的最后一条记录。

where id=(select max(id) from entries)

你需要做的是在删除的链接中加入一个参数,比如'/delete/:id',其中的id就是你想删除的那条记录的编号。然后你要修改模板,让它生成这样的链接:

<a href="{{ url_for('delete_entry', entry.id) }}">Delete</a>

同时还要修改删除记录的数据库查询:

g.db.execute('delete from entries where id=' + id)

编辑1:

我查看了Flask的文档,要在你的路由中获取变量,你需要这样修改路由:

@app.route('/delete/<int:entry_id>')

这样你就可以在你的Python函数中获取到entry_id了:

def delete_entry(entry_id):
g.db.execute('delete from entries where id=' + entry_id)

最后,你还需要在url_for函数中指定你的记录编号:

<a href="{{ url_for('delete_entry', entry_id = entry.id) }}">Delete</a>

撰写回答