Как удалить запись в Sqlite - PullRequest
2 голосов
/ 01 ноября 2011

Я изучаю Python с помощью учебного приложения от Flask и не могу понять, как ссылаться на определенную строку в базе данных.Я пытаюсь удалить запись, используя ссылку для удаления в шаблоне. Я потратил целый день, пытаясь найти все, что мог, и действительно понять это.Я знаю, что это просто, но я не понимаю!

Вот шаблон 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>

Как видите, рядом с каждой записью есть ссылка для удаления. Как я должен это делать?сослаться на правильный идентификатор в базе данных?

Вот функция 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 голосов
/ 01 ноября 2011

Себастьен Функция delete_entry удаляет последнюю запись в БД

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

Что вам нужно сделать, это вставить параметр в URL для удаления, например '/ delete /:id ', где id - это идентификатор записи, которую вы хотите удалить, затем измените шаблон для генерации URL следующим образом:

<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>')

Таким образом вы получитеentry_id в вашей функции python:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...