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()
Je ne peux pas comprendre pourquoi cela me donne l'erreur. La chaîne que j'essaie d'insérer a une longueur de 74 caractères, elle est: "/ gifs/epic-fail-photos-there-i-fixed-it-aww-man-the -tire-pressions-low.gif "
J'ai essayé de str (tableau [cnt]) avant de l'insérer, mais le même problème se produit, la base de données n'a qu'une colonne, qui est une valeur TEXT.
J'y travaille depuis des heures et je n'arrive pas à comprendre ce qui se passe.
Vous devez passer une séquence, mais vous avez oublié la virgule pour transformer vos paramètres en tuple:
cursor.execute('INSERT INTO images VALUES(?)', (img,))
Sans la virgule, (img)
est simplement une expression groupée et non un tuple. La chaîne img
est donc traitée comme une séquence d'entrée. Si cette chaîne comporte 74 caractères, Python considère alors que 74 valeurs de liaison distinctes, chacune d'un caractère.
>>> len(img)
74
>>> len((img,))
1
Si vous trouvez plus facile à lire, vous pouvez également utiliser un littéral de liste:
cursor.execute('INSERT INTO images VALUES(?)', [img])
cursor.execute(sql,array)
Prend seulement deux arguments.
Il va itérer l'objet "array" et correspondre? dans la chaîne sql.
(avec des contrôles de santé pour éviter l'injection sql)