紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【Python+Postgres】'int' object does not support indexingが発生したときの対処法。タプルの要素が1つの場合でもカンマが必要。

f:id:yokoyantech:20181012183231p:plain

はじめに

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)