12億円ほしい人のブログ

メガBIG当たらないかな

Flaskアプリ用にPostgreSQLを用意

FlaskベースのWebアプリ用のデータベースとしてPostgreSQLを用意した時のメモ。

PostgreSQLのインストール

以下サイトを参考に実施。

管理者ユーザーでログイン

C:\PostgreSQL\15\bin\psql.exe -U postgres
# Passwordを入力

ロールを作成

CREATE ROLE flaskuser WITH LOGIN PASSWORD 'password';

データベースを作成

WITH OWNER flaskuserをつけないと、flask db migrateで「psycopg2.errors.InsufficientPrivilege: スキーマ public へのアクセスが拒否されました」エラーになりました。

CREATE DATABASE flasktutorial WITH OWNER flaskuser;
# \lでデータベース一覧を確認する

アクセスできることを確認

# ctrl+cで管理者ユーザーからログアウトしておく
C:\PostgreSQL\15\bin\psql.exe -U flaskuser -d flasktutorial
# Passwordを入力

FlaskアプリにてDB接続を実装

SQLALCHEMY_DATABASE_URIに、接続情報を記載

# from pathlib import Path
from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from flask_wtf.csrf import CSRFProtect

db = SQLAlchemy()
csrf = CSRFProtect()


def create_app():
    app = Flask(__name__)
    app.config.from_mapping(
        SECRET_KEY="flaskapp123456789",
        SQLALCHEMY_DATABASE_URI="postgresql+psycopg2://{user}:{password}@{host}/{name}".format(
            user="flaskuser",
            password="password",
            host="127.0.0.1",
            name="flasktutorial",
        ),
        SQLALCHEMY_TRACK_MODIFICATIONS=False,
        SQLALCHEMY_ECHO=True,
        WTF_CSRF_SECRET_KEY="flaskapp123456789",
    )
    csrf.init_app(app)

    db.init_app(app)
    Migrate(app, db)

    from apps.crud import views as crud_views

    app.register_blueprint(crud_views.crud, url_prefix="/crud")

    return ap

DB周りのflaskコマンドを実行

flask db init
flask db migrate
flask db upgrade