2017-09-02 1 views
0

J'essaie d'insérer des données dans une table à partir d'un formulaire et d'une table différente, mais j'obtiens cette erreur.Erreur de type insertion de données dans sqlite dans flask

TypeError: function takes at most 2 arguments (3 given)

db.execute("INSERT INTO chapters (chapter, book_id) VALUES (?, ?)", [request.form['chapter']], book_id)

@app.route('/newbook') 
def new_book(): 
    return render_template('newbook.html') 

@app.route('/addbook', methods=['GET', 'POST']) 
def addbook(): 
    db = get_db() 
    db.execute("INSERT INTO books (title) VALUES (?)", 
     [request.form['title']]) 
    db.commit() 

    return redirect(url_for('new_chapter')) 


@app.route('/newchapter') 
def new_chapter(): 
    return render_template('newchapter.html') 

@app.route('/addchapter', methods=['GET', 'POST']) 
def addchapter(): 
    db = get_db() 
    cur = db.execute("SELECT last_insert_rowid()") 
    book_id = cur.fetchone() 

    db.execute("INSERT INTO chapters (chapter, book_id) VALUES (?, ?)", [request.form['chapter']], book_id) 
    db.commit() 

    return redirect(url_for('new_concepts')) 
+0

Quelle ligne vous donne l'erreur, pourriez-vous s'il vous plaît mettre à jour votre question avec une trace de pile complète? – Soviut

Répondre

2

L'erreur vous dit ce qui ne va pas, vous avez donné la ligne suivante 3 arguments quand il ne peut accepter 2.

db.execute("INSERT INTO chapters (chapter, book_id) VALUES (?, ?)", [request.form['chapter']], book_id) 

Le 1er argument est censé être le SQL requête alors que le 2ème argument est censé être une liste de valeurs qui remplaceront les espaces réservés ?. Cependant, vous avez accidentellement mis le book_id en dehors de la liste, le faisant passer comme un 3ème argument. Il devrait être dans la liste comme suit:

db.execute("INSERT INTO chapters (chapter, book_id) VALUES (?, ?)", [request.form['chapter'], book_id]) 
+0

qui me donne 'sqlite3.InterfaceError: Erreur de liaison du paramètre 1 - type probablement non pris en charge. ' – nasan

+0

Utilisez' print (request.form [' chapter ']) 'pour vous assurer qu'il n'est pas' None'. Assurez-vous que toutes les données de votre formulaire reviennent correctement. – Soviut

+0

@nasan Cette question a résolu votre problème avec l'erreur '3 arguments', donc vous devriez la corriger. La nouvelle erreur que vous obtenez est sans rapport (c'est quelque chose à voir avec les données que vous transmettez). Vous devriez google votre nouveau problème et retourner à SO avec une nouvelle question si vous ne pouvez pas le résoudre. – Soviut