如何在Sqlite中删除记录

时间:2011-11-01 14:42:09

标签: python sqlite flask jinja2

我正在使用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 个答案:

答案 0 :(得分:5)

sebastien delete_entry函数正在删除db

中的最后一个条目

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

您需要做的是在网址中插入一个参数,例如'/ delete /:id',其中id是您要删除的条目的ID,然后更改模板以生成网址:< / p>

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

并且还更改删除条目的数据库查询:

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

EDIT1:

我检查了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函数中指定您的条目ID:

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