小能豆

sqlite3.ProgrammingError: 提供的绑定数量不正确。当前语句使用了 1 个,而提供的绑定数量为 74 个

javascript

def insert(array):
    connection=sqlite3.connect('images.db')
    cursor=connection.cursor()
    cnt=0
    while cnt != len(array):
            img = array[cnt]
            print(array[cnt])
            cursor.execute('INSERT INTO images VALUES(?)', (img))
            cnt+= 1
    connection.commit()
    connection.close()

当我尝试时insert("/gifs/epic-fail-photos-there-i-fixed-it-aww-man-the-tire-pressures-low.gif"),我收到如标题所示的错误消息(该字符串确实有 74 个字符长)。

代码有什么问题?我该如何修复?


阅读 46

收藏
2024-07-16

共1个答案

小能豆

您需要传递一个序列,但是忘记了使用逗号来使您的参数成为元组:

cursor.execute('INSERT INTO images VALUES(?)', (img,))

如果没有逗号,(img)则只是一个分组表达式,而不是元组,因此img字符串被视为输入序列。如果该字符串长度为 74 个字符,则 Python 会将其视为 74 个单独的绑定值,每个值长度为一个字符。

>>> len(img)
74
>>> len((img,))
1

如果您发现它更容易阅读,您也可以使用列表文字:

cursor.execute('INSERT INTO images VALUES(?)', [img])
2024-07-16