LoginSignup
0
0

SQLite3のエラーの解決方法

Posted at

pythonのBottleフレームワークを使用してデータベースの処理を書いた時、
エラーでハマったので記録として残す。

near "(": syntax error について

エラー文

以下のようなエラーが出た。

sqlite3.OperationalError: near "(": syntax error

書いていた処理

# 既にデータベースとテーブルは作成済み
def store(content):
	conn = sqlite3.connect(dbname)
	c = conn.cursor()
	print(content)
	insert = 'insert into data(status) values(?)'  # ここがおかしい
	c.execute(insert, (content,))
:
:

原因

insert文のinto (data)がおかしい。よくわからないコードを書いている。。。

エラーの見方

(の近くでエラーが発生しているという意味なので、
(付近を確認して、変な書き方のコードがないか確認する。

Incorrect number of bindings supplied... について

エラー文

以下のエラーが発生した。

Incorrect number of bindings supplied. The current statement uses 1, and there are 4 supplied.

書いていた処理

# 既にデータベースとテーブルは作成済み
def store(content):
	conn = sqlite3.connect(dbname)
	c = conn.cursor()
	print(content)
	insert = 'insert into data(status) values(?)'
	c.execute(insert, (content))  # ここがおかしい
:
:

原因

execute文がおかしい。正しくは以下の通り。
contentの後に,が必要。

c.execute(insert, (content,))

エラーの見方

insert文の?の数と、execute文の第二引数に指定した値の数が合わないという意味。
プリペアードステートメント(?)を使用する場合、タプルで値を渡さないといけない。
タプルの要素が1つの場合、末尾に,が必要!

参考サイト

・insert文の書き方
 https://products.sint.co.jp/topsic/blog/sql-insert

・Incorrect number of bindings supplied...の対処法
 https://techracho.bpsinc.jp/baba/2010_07_16/2130

・プリペアードステートメントの書き方
 https://dev.classmethod.jp/articles/query-with-mysql-connector-python/

・要素が1個のタプルの解説
 https://note.nkmk.me/python-tuple-single-empty/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0