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-人最轮胎压力-low.gif“
我在插入之前尝试过str(array [cnt]),但是同样的问题正在发生,数据库只有一列,这是一个TEXT值。
我已经好几个小时了,我无法弄清楚发生了什么。
答案 0 :(得分:287)
你需要传递一个序列,但是你忘记了逗号以使你的参数成为一个元组:
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 :(得分:1)
cursor.execute(sql,array)
仅接受两个参数。
它将迭代“数组”对象并匹配吗?在sql-string中。
(通过健全性检查避免sql-injection)