问题:sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,并且提供了74
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()
我无法弄清楚为什么这会给我错误,我尝试插入的实际字符串长度为74个字符,它是:“ / gifs / epic-fail-photos-there-i-fixed-it-aww-man-the -tire-pressures-low.gif”
在插入它之前,我曾尝试过str(array [cnt]),但同样的问题也在发生,数据库只有一列,这是一个TEXT值。
我已经待了好几个小时,无法弄清楚到底发生了什么。
回答 0
您需要传递一个序列,但是您忘记了使参数成为元组的逗号:
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])
回答 1
cursor.execute(sql,array)
只需要两个参数。
它将迭代“数组”对象并匹配吗?在sql字符串中。
(进行健全性检查以避免sql-injection)