web-dev-qa-db-ja.com

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])を試みましたが、同じ問題が発生しています。データベースには1つの列しかなく、これはTEXT値です。

私は何時間もそこにいて、何が起こっているのか分かりません。

130
AB49K

シーケンスを渡す必要がありますが、パラメーターをタプルにするためにコンマを忘れました:

cursor.execute('INSERT INTO images VALUES(?)', (img,))

コンマを使用しない場合、(img)はタプルではなくグループ化された式であるため、img文字列は入力シーケンスとして扱われます。その文字列が74文字の場合、Pythonは、それぞれ1文字の長さの74個の個別のバインド値と見なします。

>>> len(img)
74
>>> len((img,))
1

読みやすい場合は、リストリテラルを使用することもできます。

cursor.execute('INSERT INTO images VALUES(?)', [img])
289
Martijn Pieters
cursor.execute(sql,array)

2つの引数のみを取ります。
「配列」オブジェクトを繰り返して一致しますか? sql-string.
(sql-injectionを回避するための健全性チェック付き)

1
Punnerud