質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

183閲覧

postgresqlについて

todasan

総合スコア78

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2024/11/07 13:27

編集2024/11/07 13:30

実現したいこと

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等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

上記の質問分の結果が出る。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FiroProchainezo

2024/11/11 07:58

> ERROR [custom_psql.py: 59] Expected bytes or unicode string, got psycopg2.extensions.connection instead custom_psql.pyの59行目でエラーが出ているようですが、質問文に掲載されているコードは55行(56行?)しかありません。 59行目ってどこですか?
todasan

2024/11/11 09:45

FiroProchainezoさん 以下の部分になります。 if logger==None: custom.get_logger().error(str(e))
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問