PythonでFlaskを用いてyugabytedbのデータベース内のデータを返す

スポンサーリンク

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のデータベース内のデータを返すことができました。

コメント

タイトルとURLをコピーしました