FlaskのJSON返却をRESTっぽく

今回は、FlaskのJSON返却をもう少し改善します。

はじめに

今回の検証は、Flaskを使ってPostgreSQLからデータを取得しJSON形式で返却します。
URLリクエスト上のパラメータを使って返却結果をフィルタします。

PostgreSQL上へのデータ投入などは、以下の記事に書いてありますので、必要な方は参照してください。

FlaskからPostgreSQLを使用

今回は、Flaskを使ってPostgreSQLにアクセスしてみます。 はじめに 今回は、Flaskを使ってPostgreSQLからデータを検索してブラウザに表示します。 PostgreSQLはDockerコン…

今回の確認環境は以下となります。

今回の確認環境

  • PC:Mac mini(M1 ,2020)
  • OS:macOS Monterey バージョン12.0.1
  • Python:3.9.9
    • Flask:2.0.2
    • psycopg2:2.9.3
  • Docker:20.10.8
  • PostgreSQL:13.3(Dockerコンテナ)

コード作成・検証

今回作成したPythonコードは以下となります。

from flask import Flask, jsonify ,request
import psycopg2
import psycopg2.extras

app = Flask(__name__)

@app.route('/query' ,methods=['GET'])
def pgrest():

    # Create connection.
    conn = psycopg2.connect(
        host='localhost', 
        port=15432,
        database='takamoto', 
        user='keiji', 
        password='keiji',
    )
    # Build where(like) condition.
    name = '%' + request.args.get('name', default='', type=str) +'%'

    # Create cursor and fetch and close.
    cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    cur.execute('select * from covid19 where country like %(name)s order by no', {'name': (name,)})
    ds = cur.fetchall()
    cur.close()

    # Close connection.
    conn.close()

    # Convert dictionary with column name.
    dictds = []
    for row in ds:
        dictds.append(dict(row))

    # return json
    return jsonify({'status':'OK' ,'dataset':dictds})

app.run(port=8888 ,debug=True)

コード上のポイントを以下に示します。

  • URLリクエストを取得するためにFlaskのrequestモジュールをインポート(1行目)
  • GETパラメータnameを、requestオブジェクトから取得しSQLのlike句用の文字列を生成(19行目)
  • 作成したlike句ようの文字列を検索用のSQLに設定(23行目)

プログラムを起動した状態でブラウザから以下のリクエストを発行すると、国名(カラムcountry)が”Jap”と部分一致するデータをJSON形式で返却します。

http://localhost:8888/query?name=Jap

表示結果

まとめ

今回は、Flaskを使って少しだけRESTっぽいAPIを作成しました。

次回以降は、jQueryを使ってフロントエンドとの連携を記事にしていこうと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

10 − 9 =