Когда я пытаюсь insert("/gifs/epic-fail-photos-there-i-fixed-it-aww-man-the-tire-pressures-low.gif"), я получаю сообщение об ошибке, как в заголовке (длина строки действительно 74 символа).
Вам нужно передать последовательность, но вы забыли запятую, чтобы сделать ваши параметры кортежем:
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])
Ответ 2
У меня эта проблема возникла, когда количество столбцов не совпадает с количеством вставляемых значений.
Например:
conn = sqlite3.connect(',ySQL.db') c = conn.cursor()
sql = "INSERT INTO mytable (X1, X2, X3) VALUES (?,?,?)"
Это вызовет ошибку, потому что число X (X1, X2, X3) не совпадает с числом Y (Y1, Y2). Таким образом, ваши столбцы должны иметь тот же номер, что и вставленные значения.
Ответ 3
Вас смущает тот факт, что вы имеете дело только с данными одного столбца, но синтаксис совместим для работы с несколькими столбцами одновременно, отсюда и причина преобразования вашей строки в, т. е. кортеж.
Вы могли бы исправить это с помощью zip: cursor.execute('INSERT INTO images VALUES(?)', zip(img)).
Чтобы избежать нескольких execute-вызовов, вы можете сохранить строки в списке и обновить таблицу одним вызовом с помощью executemany: