Удаление записей из базы данных с помощью flask/mysqldb

Я пытаюсь сделать просмотр, вставить, обновить и удалить на одной странице. На данный момент я могу сделать вид и вставить. Однако, когда я пытаюсь удалить записи на основе идентификатора, я не могу захватить идентификатор, и поэтому моя функция удаления не может быть запущена. Когда я попытался нажать кнопку «Удалить» для записи, это просто показывает, что URL-адрес не может быть найден.

app.py:

from flask import Flask, render_template, request, redirect, url_for
from flask_mysqldb import MySQL

app = Flask(__name__)

app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = ''
app.config['MYSQL_DB'] = 'myproject'


mysql = MySQL(app)

@app.route('/', methods=['GET', 'POST'])
def select():
   cur = mysql.connection.cursor()
   cur.execute("SELECT * FROM people")
   selectall = cur.fetchall()
   cur.close()
   return render_template('index.html', dbhtml = selectall)

@app.route('/insert', methods = ['GET','POST'])
def insert():
   name = request.form['name']
   email = request.form['email']

   cur = mysql.connection.cursor()
   cur.execute("INSERT INTO people (name, email) VALUES (%s, %s)", (name, email))

   mysql.connection.commit()
   return redirect('/')

@app.route('/delete/<int:id>', methods = ['GET','POST','DELETE'])
def delete(id):
   cur = mysql.connection.cursor()
   cur.execute("DELETE FROM people WHERE id=%s", (id))

   mysql.connection.commit()
   return redirect('/')

if __name__ == '__main__':
   app.run(debug=True)

индекс.html:

<form action="{{url_for('insert')}}" method="POST">

  <div class="form group">

    <label>Name:</label>
    <input type="text" class="form-control" name="name" required="1">

  </div>

  <div class="form group">

    <label>Email:</label>
    <input type="text" class="form-control" name="email" required="1">

  </div>

  <div class="form group">

    <button class="btn btn-primary" type="submit">Insert Data</button>

  </div>

</form>

<br><br><br>

  <table align="center">
    <tr align="center">
      <td>id:</td>
      <td>name:</td>
      <td>email:</td>
    </tr>
    {% for row in dbhtml %}
    <tr>
      <td>{{row[0]}}</td>
      <td>{{row[1]}}</td>
      <td>{{row[2]}}</td>
    </tr>
    <tr>
      <td><a href="/delete/{{id}}">Delete</a></td>
      <td><a href="#">Update</a></td>
    </tr>
    {% endfor %}
  </table>
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Доступ AWS Java Lambda к экземпляру AWS RDS MySQL с помощью CDK
Доступ AWS Java Lambda к экземпляру AWS RDS MySQL с помощью CDK
В этой статье мы рассмотрим, как включить доступ Java Lambda к экземпляру AWS RDS MySQL.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы должны отправить идентификатор, так как вы можете видеть, что идентификатор - это строка [0], а не "id"

<td><a href="/delete/{{row[0]}}">Delete</a></td>

я не знаю, правильно это или нет, я думаю, что метод удаления должен быть заключен в форму

<form method="POST" action=..url_delete>
   <td><buttin type=submit>Delete</button></td>
<form>

и измените cur.execute на

 cur.execute("DELETE FROM people WHERE id={}".format(id))

Теперь я могу получить идентификатор для каждой кнопки, но он говорит, что объект int не является итерируемым

nalyr 11.11.2022 08:54

можешь показать ошибку? @nalyr

Eric Kong 11.11.2022 09:08

TypeError: объект 'int' не является итерируемым Traceback (последний последний вызов) cur.execute("УДАЛИТЬ ОТ людей, ГДЕ id=%s", (id))

nalyr 11.11.2022 09:13

посмотри мой новый ответ @nalyr

Eric Kong 11.11.2022 09:15

да, это работает, я также попытался изменить его на cur.execute («УДАЛИТЬ ОТ людей, ГДЕ id =% s», (id,)). Добавление запятой каким-то образом позволяет мне решить и ее. В любом случае большое спасибо!

nalyr 11.11.2022 09:18

Другие вопросы по теме