Я пытаюсь сделать просмотр, вставить, обновить и удалить на одной странице. На данный момент я могу сделать вид и вставить. Однако, когда я пытаюсь удалить записи на основе идентификатора, я не могу захватить идентификатор, и поэтому моя функция удаления не может быть запущена. Когда я попытался нажать кнопку «Удалить» для записи, это просто показывает, что 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>
вы должны отправить идентификатор, так как вы можете видеть, что идентификатор - это строка [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))
можешь показать ошибку? @nalyr
TypeError: объект 'int' не является итерируемым Traceback (последний последний вызов) cur.execute("УДАЛИТЬ ОТ людей, ГДЕ id=%s", (id))
посмотри мой новый ответ @nalyr
да, это работает, я также попытался изменить его на cur.execute («УДАЛИТЬ ОТ людей, ГДЕ id =% s», (id,)). Добавление запятой каким-то образом позволяет мне решить и ее. В любом случае большое спасибо!
Теперь я могу получить идентификатор для каждой кнопки, но он говорит, что объект int не является итерируемым