ホームページ >バックエンド開発 >Python チュートリアル >長い文字列に対して SQLite INSERT ステートメントが「バインディングの数が正しくない」という理由で失敗するのはなぜですか?

長い文字列に対して SQLite INSERT ステートメントが「バインディングの数が正しくない」という理由で失敗するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-30 10:23:15793ブラウズ

Why Does My SQLite INSERT Statement Fail with

バインディングの数が正しくありません

以下のコードを使用して SQLite データベースに文字列を挿入しようとすると、間違った数を示すエラーが発生しますバインディングの数:

def insert(array):
    connection=sqlite3.connect('images.db')
    cursor=connection.cursor()
    cnt=0
    while cnt != len(array):
            img = array[cnt]
            cursor.execute('INSERT INTO images VALUES(?)', (img))
            cnt+= 1
    connection.commit()
    connection.close()

挿入される文字列が次の場合にエラー メッセージが表示されます。長さは 74 文字です。

問題の根本

コードは、一連の項目をバインド値としてexecute() メソッドに渡そうとします。ただし、バインド値パラメータにはタプルが必要であり、コードではタプルの作成に必要なカンマの指定が無視されます。

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

修正

問題を解決するにはこの問題が発生した場合は、バインド値パラメータの末尾にカンマを追加して、タプル:

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

または、リスト リテラルを使用することもできます。これも有効なシーケンスとして認識されます:

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

どちらの修正を行っても、コードは画像パスを正しく挿入します。バインディングの数が正しくないというエラー メッセージを表示することなく、データベースに保存できます。

以上が長い文字列に対して SQLite INSERT ステートメントが「バインディングの数が正しくない」という理由で失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。