2017-09-02 80 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