紙一重の積み重ね

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

Python

【AWS Lambda】No module named 'xxxx'エラーが発生したときの対処法

やりたいこと 業務で書いたLambdaのコード量が900行を超えてカオスになったので、リファクタリングしたい。 コードの用途ごとにソースを分割したい。 発生したエラー Unable to import module 'lambda_function': No module named 'util' 原因 zipで圧縮した…

【AWS Lambda】PythonからPostgreSQLのストアドプロシージャを実行する方法 #aws

やりたいこと PythonからPostgreSQLのストアドプロシージャを実行したい。 具体的にはAWS Lambdaからストアドを実行したい。 実行環境 AWS Lambda Python3.6 psycopg2 PostgreSQL9.6.6 実現方法 psycopg2のcallprocメソッドを使う。 実装例 import sys impor…

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

はじめに Psycopg2のmogrifyにint型の要素を1つ渡して、エスケープしたSQLを取得しようとしたらエラーになったのでメモ。 環境 AWS Lambda Python3.6 PostgreSQL9.6 発生したエラー "errorMessage": "'int' object does not support indexing", "errorType":…

【Python+Psycopg2】PostgreSQLからEXISTSを使ってデータの存在チェックメソッドを作る方法

実行環境 AWS Lambda Python3.6 PostgreSQL9.6.6 psycopg2 やりたいこと existsでデータの有無を確認 結果をBooleanで返却したい 解決方法 fetchone()を使う。公式ドキュメントは以下。 The cursor class — Psycopg 2.7.5 documentation 実装例 def is_exist…

【Python】複数のインデックス番号を指定してリストから一括削除する方法

やりたいこと 複数のインデックス番号を指定して、リストから対象のデータを一度に削除したい 結論 lambda式を使う 困った例 以下だと、削除したいインデックスがずれてしまう。 list = ["りんご","みかん","バナナ","メロン","スイカ"] # りんごとメロンを…

【AWS DynamoDB + Python3】欲しいattributeだけを選択してScanする方法

困っていること StepFunctionsを使ってLambdaを組み立てる場合、JSONデータのサイズ上限に引っかかってしまう。 { "error": "States.DataLimitExceeded", "cause": "The state/task 'arn:aws:lambda:ap-northeast-1:892368313445:function:hoge' returned a …

【Python3】メソッドの戻り値を複数返す方法

やりたいこと 1つのメソッドで複数の戻り値を返したい 解決策 returnする値をカンマで区切る 文字列と数字を返す例 def hoge(): # 略 return "hoge",123456789 文字列と数字が含まれたリストを返す例 def hoge(): # 略 return ["hoge",123456789] 複数のリス…

【Python】Scrapyでログを出力する方法

やりたいこと Scrapyで実装した処理の任意の場所にログを追加したい。 環境 Scrapy1.5.0 Python3.6 実現方法 import loggingと、logging.log_level()を使用する。 以下、infoレベルのログ出力の実装例。 import logging # 略 logging.info("hogehoge") 参考…

【Python】flake8指摘事項まとめ

はじめに 最近、Pythonを使ってコードを書きます。まだまだ不慣れなので、flake8を導入してみました。 Rubocopみたいで便利ですね。後学のために指摘された内容をまとめます。 【参考情報】flake8公式 lintlyci.github.io E111 indentation is not a multipl…

"Object of type 'Decimal' is not JSON serializable"が発生したときの対処法 #Python3 #AWS #dynamodb

やりたいこと Python3を使って、DynamoDBのqueryを使って取得したJSONデータをPostgreSQLにINSERTしたい 実行環境 AWS DynamoDB AWS Lambda Python3.6 psycopg2.7.4 AWS RDS(PostgreSQL9.6.6) 発生したエラー jsonを使ってダンプした結果、INSERT時にエラ…

Pythonで使っているライブラリのバージョンを確認する方法 #Python3

やりたいこと pip installしたライブラリ群をそのままGitにpushしたため、requirements.txtにライブラリ群を集約したい そのため、pip installしたライブラリ群のバージョンを確認したい 【結論】ライブラリのバージョンを確認する pip freezeまたは、pip li…

Python3+Psycopg2を使ってsequenceを取得する #Python3 #PostgreSQL9.6

やりたいこと Python3で、PostgreSQLのsequenceを使った処理を書きたい 実行環境 PostgreSQL9.6.6 Python3.6 psycopg2.7.4 検証用シーケンス CREATE SEQUENCE "schema"."table_name_id_seq" INCREMENT 1 START 1 NO MAXVALUE NO MINVALUE NO CYCLE CACHE 1 O…

psycopg2.ProgrammingError: can't adapt type 'dict'が発生したときの対処法 #Python3 #PostgreSQL9.6

やりたいこと Pythonを使って、JSONデータをPostgreSQLにINSERTしたい 実行環境 PostgreSQL9.6.6 Python3.6 psycopg2.7.4 発生したエラー psycopg2.ProgrammingError: can't adapt type 'dict' 解決法 JSONデータが格納されている変数に対して、json.dumps()…

【Python3】SQLに改行を入れて複数行で書く方法

はじめに 業務で本格的にPython3を使ってLambda関数を書くようになりました。 SQLに改行を入れて複数行で書く方法 Rubyの感覚でSQLに改行を入れて書いたところエラーとなってしまったので反省。 長いSQLを複数行で書くときは、ヒアドキュメントを使う。(こ…