1. ホーム
  2. python

[解決済み】sqlite3.ProgrammingError: 指定されたバインディングの数が正しくありません。現在の文は 1 を使用しており、74 が供給されています。

2022-02-09 20:43:13

質問

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-tire-pressures-low.gif" です。

挿入する前にstr(array[cnt])を試してみましたが、同じ問題が起こっています、データベースには1列しかなく、それはTEXT値なんです。

何時間もやっていますが、何が起こっているのかがわかりません。

解決方法は?

シーケンスを渡す必要があるが、パラメータをタプルにするためにカンマを忘れている。

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

コンマ抜きで (img) はタプルではなく単なるグループ化された表現なので img の文字列が入力シーケンスとして扱われます。もしその文字列が74文字であれば、Pythonはそれを74個の別々のバインド値、それぞれ1文字の長さとして見なします。

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

読みやすいと感じたら、リスト・リテラルを使うこともできます。

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