👻

【Python - SQlite エラー】ValueError: parameters are of unsupported type

2022/09/25に公開約800字

タプル型??? 優先度変更用の括弧???

PythonでSQLiteを操作している際に発生したエラー、、、
以下のテーブル(pokemon)から図鑑番号が「25」の行を削除しようとしたときにお話ですね、、、

number name type1 type2
25 ピカチュウ でんき
152 チコリータ くさ
875 コオリッポ こおり
884 ジュラルドン はがね ドラゴン
cursor.execute("DELETE FROM pokemon WHERE number = ?", (25))

上のコードを実行すると以下のエラーが、、、

ValueError: parameters are of unsupported type

内容は引数のデータ型が違うとのこと、
う~~~ん、、、第二引数はタプル型でokでしょ、、、と思っていたんですが、上の書き方は単なる整数型として扱われてしまします。

以下のように書き換える必要があります。

cursor.execute("DELETE FROM pokemon WHERE number = ?", (25, ))

これは「(25)」が「25」とみなされないようにするためです。
括弧はタプル型を表すだけでなく、数字型のデータを保有する際には結合優先度調整用に使用されます。

1 + 2 * 3 => 7
(1 + 2) * 3 => 9

的な感じです。
「(数字, )」と最後にカンマをつけることで要素をひとつだけ持つタプル型であると表すことができます。

Discussion

ログインするとコメントできます