【问题标题】:Type error inserting data into sqlite in flask将数据插入烧瓶中的 sqlite 时输入错误
【发布时间】:2017-09-03 05:51:21
【问题描述】:

我正在尝试将数据从一个表单和另一个表插入到一个表中,但是我收到了这个错误。

TypeError:函数最多接受 2 个参数(给定 3 个)

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'))

【问题讨论】:

  • 哪一行给你错误,你能用完整的堆栈跟踪更新你的问题吗?

标签: python flask sqlite


【解决方案1】:

错误告诉你出了什么问题,当它只能接受 2 时,你给出了以下第 3 行参数。

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])

【讨论】:

  • 这给了我sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type.
  • 使用print(request.form['chapter']) 确保它不是None。确保所有表单数据都正确返回。
  • @nasan 这个问题解决了您的3 arguments 错误问题,因此您应该将其标记为正确。你得到的新错误是无关的(它与你传递的实际数据有关)。如果你不能解决它,你应该用谷歌搜索你的新问题并返回一个新问题。
  • 我将book_id 更改为str(book_id)。我现在可以看到表中的值。 chapter 是我插入到 html 表单中的 int,但 book_id 出来是这样的 <sqlite3.Row object at 0x102755d10>
  • 这是说它在绑定参数 1 时遇到问题,即章节。如果您的chapter 是数据库中的int,那么您需要将表单值转换为整数,因为它将以字符串形式出现。同样,如果book_id 是数据库中的int,则不应将其转换为字符串。
猜你喜欢
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 2020-05-03
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多