検索
python + sqlite3で"OperationalError: no such column: "
- M.R

- 2020年8月10日
- 読了時間: 1分
現象
pythonでsqlite3を使ってデータベースにデータを追加しようとしたら"OperationalError: no such column: None"が出た。
以下のコードで再現する。examplesテーブルにinteger型のカラムvalueがあるとする。valueとしてpython内部で作った変数xの値を格納する。
環境は python 3.7 sqlite 3.30.0
import sqlite3
db_path="test.sqlite3"
con=sqlite3.connect(db_path)
c=con.cursor()
x=1
sql="insert into examples(value) values({0})".format(x)
c.execute(sql)
con.commit()
con.close()x=1などは問題ない。しかし、x=Noneとすると、
OperationalError: no such column: Noneとなってしまう。
原因
.format()を使ったため、"None"が文字列になってしまったこと。正しくは次のように書く。公式でもこちらが推奨されていた。
#~~~略~~~~
x=None
sql="insert into examples(value) values(?)"
c.execute(sql, [x])
#~~~略~~~~





コメント