はじめに
Psycopg2のmogrify
にint型の要素を1つ渡して、エスケープしたSQLを取得しようとしたらエラーになったのでメモ。
環境
- AWS Lambda
- Python3.6
- PostgreSQL9.6
発生したエラー
"errorMessage": "'int' object does not support indexing", "errorType": "TypeError
原因
タプルの要素が1つの場合の文法が誤っているため。具体的にはカンマがないため。
ダメな例
query = "DELETE FROM public.hoge WHERE hoge_id = %s" values = (fuga.id) sql = mogrify_query(cur, query, values)
処置
タプルの要素が1つでもカンマを付与する。公式ドキュメントにも記載がある通り、タプルを作るのはカンマ。丸括弧ではない。
なお、タプルを作るのはカンマであり、丸括弧ではありません。
4. 組み込み型 — Python 3.6.5 ドキュメント
修正例
query = "DELETE FROM public.hoge WHERE hoge_id = %s" values = (fuga.id,) sql = mogrify_query(cur, query, values)