2017-09-02 79 views
0

我想從表單和表中插入數據到表中,但我得到這個錯誤。類型錯誤插入數據到sqlite中燒瓶

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

哪一行是給你的錯誤,你能否用一個完整的堆棧跟蹤來更新你的問題? – Soviut

回答

2

錯誤是告訴你什麼是錯的,你給下面的行3個參數時,它只能接受2

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

的第一個參數應該是SQL查詢,而第二個參數應該是一個將取代?佔位符的值列表。但是,您不小心將book_id置於列表的外部,導致它作爲第三個參數傳遞。它應該在列表中,如下所示:

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

,給我'sqlite3.InterfaceError:錯誤綁定參數1 - 可能不支持的類型。' – nasan

+0

使用'print(request.form ['chapter'])'確保它不是'None'。確保您的所有表單數據都能正確回來。 – Soviut

+0

@nasan這個問題解決了'3 arguments'錯誤的問題,所以你應該標記它是正確的。你得到的新錯誤是無關的(這與你傳遞的實際數據有關)。你應該谷歌你的新問題,並返回到一個新的問題,如果你不能解決它。 – Soviut