带有 SQLITE3 的 Pythons Bottle

Pythons Bottle with SQLITE3

我一直在尝试练习 Bottle Py。有制作APP的教程:TODO

它工作正常。但是如果任务 id 超过 1 个字符,则表示 10 而不是 1,2,3,4,5,6,7,8,9

显示如下错误。

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

代码是:

@route('/edit/<no:int>', method='GET')
def edit_item(no):

    if request.GET.save:
        edit = request.GET.task.strip()
        status = request.GET.status.strip()

        if status == 'open':
            status = 1
        else:
            status = 0

        conn = sqlite3.connect('todo.db')
        c = conn.cursor()
        c.execute("UPDATE todo SET task = ?, status = ? WHERE id LIKE ?", (edit, status, no))
        conn.commit()

        return '<p>The item number %s was successfully updated</p>' % no
    else:
        conn = sqlite3.connect('todo.db')
        c = conn.cursor()
        c.execute("SELECT task FROM todo WHERE id LIKE ?", (str(no)))
        cur_data = c.fetchone()

        return template('edit_task', old=cur_data, no=no)

回溯:

1.

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/bottle.py", line 862, in _handle
    return route.call(**args)
  File "/usr/lib/python2.7/dist-packages/bottle.py", line 1737, in wrapper
    rv = callback(*a, **ka)
  File "todo.py", line 67, in edit_item
    c.execute('SELECT task FROM todo WHERE id LIKE ?', no)
ValueError: parameters are of unsupported type

2.

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/bottle.py", line 862, in _handle
    return route.call(**args)
  File "/usr/lib/python2.7/dist-packages/bottle.py", line 1737, in wrapper
    rv = callback(*a, **ka)
  File "todo.py", line 67, in edit_item
    c.execute('SELECT task FROM todo WHERE id LIKE ?', (no))
ValueError: parameters are of unsupported type

怎么办?

这可能会发生,因为 execute 函数将在您执行 (str(no)) 时解压缩您的第二个参数,外部 () 不会转换您的元组,您需要执行 (str(no),) 如果元组中只有一个元素。

例如,由于它识别为字符串,它将"10"解压为("1", "0")