読者です 読者をやめる 読者になる 読者になる

【Python3】sqlite3.ProgrammingError: Incorrect number of bindings supplied【SQLite3】

また引っかかりそうなのでメモ。

環境

Python 3.4.3
sqlite3

解決策

executeメソッドSQLを実行しようとしたところ、

sqlite3.ProgrammingError: Incorrect number of bindings supplied.

と怒られてしまいました。

原因は単純で、executeメソッドの第二引数の形式です。
executeメソッドでは、第二引数はタプルで指定する必要が有るため、以下のようになります。

name = 'some_user_name'

# 駄目な例
c.execute('select * from users where name=?', name)

# 正しい例
c.execute('select * from users where name=?', (name,))

指定する変数がひとつの場合、最後に余計なカンマが付着するため若干気持ち悪いですが、Pythonの文法規則上やむを得ないですね。