【问题标题】:How to delete record in Sqlite如何在Sqlite中删除记录
【发布时间】:2011-12-19 13:41:00
【问题描述】:

我正在使用 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'))

到目前为止,我所拥有的东西有效,但这不是我想要的。提前致谢!

【问题讨论】:

  • 我编辑了我的答案,你现在有了完整的代码,可以让它在 Flask 中工作

标签: python sqlite flask jinja2


【解决方案1】:

Sebastien 的 delete_entry 函数正在删除数据库中的最后一个条目

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

您需要做的是在 url 中插入一个参数进行删除,例如 '/delete/:id',其中 id 是您要删除的条目的 id,然后更改模板以生成 url,如下所示:

<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 函数中指定你的条目 id:

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

【讨论】:

  • 感谢您为我指明了正确的方向。我收到了 Werkzeug"BuildError: ('delete_entry, entry.id', {}, None) 但我会阅读更多有关 Werkzeug 的信息。在至少,现在我明白了。我不会一直找错地方了。
  • 我的错,我忘了把参数放在函数中...哎呀!
  • 这是怎么回事 :g.db.execute('delete from entries where id=' + entry_id) 给我这个:不能连接 'str' 和 'int' 对象。我知道 id 是整数,但为什么它在这里被视为字符串?顺便说一句,为什么必须将 id 与 entry_id 连接起来?
  • 我不敢相信我所要做的就是: entry_id=str(entry_id) g.db.execute('delete from entries where id=' +entry_id) 最简单的转换方法一个整数到一个字符串,我尝试了除此之外的一切。再次感谢@Fernando!
  • 对不起,我直到现在才读到这篇文章......我很高兴你能找到自己的方式。恭喜!
猜你喜欢
  • 2013-09-12
  • 1970-01-01
  • 2015-04-11
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
相关资源
最近更新 更多