PythonでFlaskを用いてyugabytedbのデータベース内のデータを返してみます。
なお、この記事は「pythonでpsycopg2を用いてyugabytedbデータベース内のテーブルにデータを登録・追加する」という記事の続きでもあります。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■仮想環境の構築
Flaskを用いてyugabytedbのデータベース内のデータを返してみますが、その前に仮想環境の構築を行い、インストールを行います。そのために、まずはWindows10のコマンドプロンプトを起動します。
C:\Users\user_>mkdir yugabyte_api
起動後、上記のコマンドを入力し、Enterキーを押します。「mkdir」コマンドで「yugabyte_api」ディレクトリを作成します。
C:\Users\user_>cd yugabyte_api
作成後、上記のコマンドを入力し、Enterキーを押します。「cd」コマンドで「yugabyte_api」ディレクトリ内に移動します。
C:\Users\user_\yugabyte-test>py -3.8 -m venv .venv
移動後、上記のコマンドを入力し、Enterキーを押します。本来だと「python -m venv .venv」で仮想環境のディレクトリ「.venv」を作成しますが、今回はPythonのバージョンを指定しています。なお、今回仮想環境のディレクトリ名は「.venv」としていますが、ご自身で変更は可能です。
Enterキーを押すと、何も出力されませんが、これで仮想環境の作成が完了となります。
■仮想環境への切り替え
C:\Users\user_\yugabyte_api>.venv\Scripts\activate.bat
完了後、上記のコマンドを入力し、Enterキーを押します。仮想環境のディレクトリ内に作成された activateスクリプトを実行し、仮想環境に入ります。
(.venv) C:\Users\user_\yugabyte_api>
Enterキーを押すと、「(.venv)」と表示されます。これで仮想環境に入ることができました。
■Flaskとpsycopg2のインストール
(.venv) C:\Users\user_\yugabyte_api>pip install psycopg2 (.venv) C:\Users\user_\yugabyte_api>pip install Flask
仮想環境に入った後に、上記のコマンドを1つずつ入力し、Enterキーを押していきます。これでpipを経由してpsycopg2-yugabytedbをインストールします。
Enterキーを押すと、インストールが開始され、「Successfully installed(正常にインストールされました)」と出力されます。これが出力されればインストールは完了となります。
■Flaskを用いてyugabytedbのデータベース内のデータを返す
完了後、今回は「yugabyte_api」ディレクトリの「app」内に「app.py」というスクリプトファイルを作成し、ファイルの中身のコードを記述していきます。
■コード
import psycopg2 from flask import Flask import json app = Flask(__name__) def get_db_connection(): psycopg2.connect(dbname='データベース名',host='ホスト名',port='5433',user='データベースのユーザー名(初期設定の場合はadmin)',password='Cluster作成時にCREDENTIALSとして発行されたpassword',sslmode="verify-full",sslrootcert=r"「root.crt」が置かれている場所") return conn @app.route('/') def index(): conn = get_db_connection() cur = conn.cursor() cur.execute('SELECT * FROM test_1;') test_data = cur.fetchall() cur.close() conn.close() return json.dumps(test_data,ensure_ascii=False)
今回は事前にyugabytedbのデータベース内に「test_1」というテーブルを作成しています。そのテーブルに「1,’田中’,29,’日本語’」というデータを登録しています。
なお、cur.fetchall()でテーブル内のデータを抜き出し、抜き出したデータをtest_data変数に格納し、returnで変数を返しますが、この際に、今回はjson.dumps()を用いて、データをJSON形式にエンコードし返します。またエンコードを行いますが、今回はテーブル内のデータには日本語が含まれていますので、「ensure_ascii=False」と設定し、日本語文字列をそのまま出力します。この設定を行っていないと文字化けが発生します。
■実行・検証
(.venv) C:\Users\user_\yugabyte_api\app>flask run
コードを記述後、ファイルを保存し、コマンドプロンプトから仮想環境に入り、cdコマンドで「app」に移動し、上記のコマンドを入力し、Enterキーを押します。これでスクリプトファイルを実行してみます。
* Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
Enterキーを押すと、開発サーバーが実行されます。実行後、Webブラウザを起動し、アドレスバーに「http://127.0.0.1:5000」と入力し、アクセスします。
アクセスすると、Flaskを用いてyugabytedbのデータベース内のデータを返すことができました。
コメント