[python] 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])을 시도했지만 동일한 문제가 발생하며 데이터베이스에는 하나의 열만 있습니다 (텍스트 값).

나는 몇 시간 동안 그것을 보았고 무슨 일이 일어나고 있는지 알 수 없습니다.



답변

시퀀스를 전달해야하지만 매개 변수를 튜플로 만드는 쉼표를 잊어 버렸습니다.

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])


답변

cursor.execute(sql,array)

두 가지 주장 만 취합니다.
“배열”객체를 반복하고 일치합니까? sql-string에서.
(sql-injection을 피하기 위해 온 전성 검사 포함)


답변