如何在Sqlite中删除记录
我正在通过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>