実現したいこと
dockerのコンテナからpythonのflaskを動かしています。
以下の参考ソースの部分でエラーが出ます。
custom.get_logger().error(str(e))
画像の「SELECT *FROM USER_MST」は成功していますが、pythonからですと、
エラーが出ます。
エラーは、
Expected bytes or unicode string, got psycopg2.extensions.connection instead
と出ます。
エラーが出る原因をお聞きしてもよろしいでしょうか。
・sc001.py def check_certification(user_id, password): """認証チェックとユーザー情報取得 認証チェックを行い、該当するユーザーが存在する時にはユーザーデータを返す。 Args: user_id (str): ユーザーID password (str): パスワード Returns: obj: 該当するユーザーがいた場合はユーザーデータ、いない場合はメッセージを含むデータ Todo: * ログイン認証時に、「入力されたパスワードをハッシュ化して比較」となっていたが、「ハッシュ化された中身を復号化させたものを比較」じゃないと一致させられないので確認。 """ sql = """SELECT * FROM USER_MST ;""" psql = custom_psql.PSQL(sql=sql, is_output=True) if len(psql.get_data()["rows"])==1: return {"status":True, "message":"", "data":psql.get_data()} else: return {"status":False, "message":MESSAGE_ALL["errors"]["fail"]["message"].format("ログイン認証"), "data":{}}
・custom_psql.py class PSQL(custom_response.Response): """PostgreSQL実行クラス custom_response.Responseを継承している。 PostgreSQLに対するデータ処理や取得を行い、取得されたデータやステータスを所持する。 Attributes: is_output (bool): SQLの実行でデータが取得される場合はTrue、取得されない場合はFalse response (custom_response.Response): Notes: 予め使用する全てのSQLが管理されておりIDが付与されているなら、引数をIDとdataにして別途JSONファイルにSQL文やis_outputを管理できたらいいかもしれない。 """ def __init__(self, sql, is_output, params_list=[[]], logger=None): """コンストラクタ クラスのコンストラクタ。 SQLを実行する。 Attributes: sql (str): 実行するSQL is_output (bool): SQLの実行でデータが取得される場合はTrue、取得されない場合はFalse params_list (list of list): 「一回毎に実行させるパラメータのリスト」を含むリスト logger (Logger or None): Thread内ではcurrent_appが使用できない為、引数として受け取る必要があったが、今は別の関数で対応可能 Notes: execute()のfor文を """ super().__init__(request=custom_request.Request(title="PostgreSQL", data={"sql": sql, "is_output": is_output, "params_list": params_list})) self.is_output = is_output try: conn = psycopg2.connect(custom.get_psql_setting(), options=custom.get_psql_option()) cur = conn.cursor(cursor_factory=DictCursor) rows = [] # current_app.logger.info("params_list") # current_app.logger.info(params_list) for params in params_list: cur.execute(sql, params) if is_output: for row in cur.fetchall(): rows.append(dict(row)) conn.commit() cur.close() conn.close() super().set_response(status=True, message="", data={"rows": rows}) except Exception as e: if logger==None: custom.get_logger().error(str(e)) else: logger.error(str(e)) super().set_response(status=False, message=str(e), data={})
・エラーのログ INFO [custom.py: 27] DATABASE_URL INFO [custom.py: 28] postgresql://postgres:alkreWERTY35@postgres:5432/jinji_login ERROR [custom_psql.py: 59] Expected bytes or unicode string, got psycopg2.extensions.connection instead ERROR [app.py:838] Exception on /sc001/check [POST]
発生している問題・分からないこと
質問文に記載しています。
エラーメッセージ
error
1質問文に記載しています。
該当のソースコード
質問文に記載しています。
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
上記の質問分の結果が出る。
補足
特になし
あなたの回答
tips
プレビュー