2017-01-09 2 views
0

Я использую функцию в python/flask для удаления некоторых записей в моей базе данных. единственная проблема, у меня есть то, что я только могу удалить записи с идентификатором от 1 до 9. Если я пытаюсь удалить запись с идентификатором выше 9 я получаю сообщение об ошибке:Выберите одну запись из базы данных Flask/Sqlite

ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.

КОЛБУ код:

@app.route('/change-teacher', methods = ['GET', 'POST']) 
def changeTeacher(): 
    teacherId = request.form['id'] 
    teachers = selectFromDatabaseWithVar("SELECT * FROM leraren WHERE id = ?", teacherId) 
    teacherData = [dict(id = row[0], naam = row[1], voornaam = row[2], foto = row[3], email = row[4]) for row in teachers] 
    return render_template("leraarAanpassen.html", teacherData = teacherData) 

@app.route('/change-teacher/action', methods = ['GET', 'POST']) 
def changeTeacherAction(): 
    teacherData = (request.form['name'], request.form['firstName'], request.form['email'], request.form['id']) 
    insertAndUpdateDatabase("UPDATE leraren SET naam = ?, voornaam = ?, email = ? WHERE id = ?", teacherData) 
    return redirect(url_for("teachers")) 

@app.route('/delete-teacher', methods = ['GET', 'POST']) 
def deleteTeacher(): 
    teacherId = request.form['id'] 
    insertAndUpdateDatabase("DELETE FROM leraren WHERE id = ?", teacherId) 
    return redirect(url_for("teachers")) 

шаблона:

{% include "dashboard.html" %} 
{% block content %} 

<table> 
<tr> 
    <th>ID</th> 
    <th>NAAM</th> 
    <th>VOORNAAM</th> 
    <th>FOTO</th> 
    <th>EMAIL</th> 
    <th>EDIT</th> 
    <th>DELETE</th> 
</tr> 

{% for leraar in leraren %} 
<tr> 
    <td>{{ leraar.id }}</td> 
    <td>{{ leraar.naam }}</td> 
    <td>{{ leraar.voornaam }}</td> 
    <td>{{ leraar.foto }}</td> 
    <td>{{ leraar.email }}</td> 
    <td> 
     <form method="POST" action="/change-teacher"> 
      <button type="submit" name="id" value="{{ leraar.id }}"> 
       <img src="{{ url_for('static', filename='img/settings.png') }}"> 
      </button> 
     </form> 
    </td> 
    <td> 
     <form method="POST" action="/delete-teacher"> 
      <button type="submit" name="id" value="{{ leraar.id }}"> 
       <img src="{{ url_for('static', filename='img/trash.png') }}"> 
      </button> 
     </form> 
    </td> 
</tr> 
{% endfor %} 
</table> 

<a href="/leraartoevoegen"><input type="button" name="addRecord" class="newRecord" value="Nieuwe record toevoegen"></a> 

{% endblock %} 

моя функция удаления:

def insertAndUpdateDatabase(query, data): 
    db = sqlite3.connect('schooldatabase.db') 
    cur = db.cursor() 
    cur.execute(query, data) 
    db.commit() 

ответ

1

Я думаю, что выполнить метод ожидает кортеж или словарь. Если вы измените ваш вызов выполнить в insertAndUpdateDatabase из

cur.execute(query, data) 

в

cur.execute(query, (data,)) 

ваш код должен работать.

0

Для управления базой данных я использую расширение флагов: flask_sqlalchemy, он очень вставляет, изменяет и удаляет записи в базе данных. Пример:

Предпочитаете вам таблицу Учитель определяет в модуле модели имя и возраст в виде столбцов. Чтобы удалить запись, просто нужно сделать следующее:

to_delete = Teacher.query.filter_by(name="<the-one-you-want-delete>").first() 
db.session.delete(to_delete) 
db.session.commit() 

И это будет все, дб является экземпляром SQLAlchemy, вы можете создать его так:

from flask_sqlalchemy import SQLAlchemy 
db = SQLAlchemy(app) 

Для более подробно Я рекомендую книгу «Фляжка веб-разработки» Мигеля Гринберга

Смежные вопросы