今更一から勉強しよう

勉強のノート。

Python, Flask, PostgreSQLで画面作成(2)

21/03/22

しばらく放置してしまったので、最初からやり直した。 目的はFlaskでPostgreSQLの内容を画面に表示すること。 実質4時間ほどで完成。

■ 参考URL

Flaskの簡単な使い方 - Qiita

python postgreSQLのライブラリpsycopg2の使い方メモ - Qiita

id:number
title:string
body:string
  • 準備 venvを作成しておく

  • Flask、psycopg2インストール

pip install Flask
pip install psycopg2


  • PycharmでFlaskを動作させる設定
FLASK_APP=main.py FLASK_DEBUG=1 flask run


  • PycharmでFlaskを動作させる設定
FLASK_APP=main.py FLASK_DEBUG=1 flask run


  • main.pyを作成する。
from flask import Flask, render_template
import psycopg2, psycopg2.extras

app = Flask(__name__)


def get_connection():
    # postgreSQLに接続(接続情報は環境変数、PG_XXX)
    connection = psycopg2.connect( \
        host='localhost', \
        user='flask', \
        password='flask', \
        database='flask', \
        port=int('5432'))

    # クライアントプログラムのエンコードを設定(DBの文字コードから自動変換してくれる)
    connection.set_client_encoding('utf-8')

    # select結果を辞書形式で取得するように設定
    connection.cursor_factory = psycopg2.extras.DictCursor
    return connection


@app.route('/')
def main():

    conn = get_connection()
    cur = conn.cursor()
    sql = 'SELECT * FROM entry'
    cur.execute(sql)

    # 引数ありの場合
    #sql = 'SELECT * FROM entry where id = %(target_id)s'
    #cur.execute(sql, {'target_id': (target_id,)})

    members = cur.fetchall()

    cur.close()
    conn.close()

    return render_template('dbtest.html', title='flask test', members=members)


## おまじない
if __name__ == "__main__":
    app.run(debug=True)


  • templatesフォルダを作成する。

  • templates/layout.htmlを作成する。

  • templates/dbtest.htmlを作成する。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% block content %}
<!-- ここにメインコンテンツを書く -->
{% endblock %}
</body>
</html>
{% extends "layout.html" %}
{% block content %}
<h3>DbTest</h3>
<ul>
    {% for member in members %}
    <li>{{ member.title }} : {{ member.body }}</li>
    {% endfor %}
</ul>
{% endblock %}