プログラミング
⏱️ 読了時間: 約5

今日やったFlaskのこと


今日やったFlaskのこと - PostgreSQL接続と環境変数の基本


こんばんは、トシぼうです。


今日は Flask で PostgreSQL データベースに接続する設定 をやっていました。

自分のメモも兼ねて、


  • そもそもこの設定は「何をしているのか」
  • なぜ環境変数を使った方がいいのか
  • 初心者がやりがちな危ない書き方

を、できるだけ初心者目線でまとめておきます。


---


1. まずは素朴な接続設定から


DB_INFO = {
    'user': 'postgres',
    'password': '',
    'host': 'localhost',
    'name': 'postgres'
}

SQLALCHEMY_DATABASE_URI = f'postgresql+psycopg://{DB_INFO["user"]}:{DB_INFO["password"]}@{DB_INFO["host"]}/{DB_INFO["name"]}'

一行で書くと「PostgreSQL に接続するための URL(接続文字列)を組み立てているコード」です。


  • `user`:データベースにログインするユーザー名
  • `password`:そのパスワード
  • `host`:データベースサーバーの場所(ローカルなら `localhost`)
  • `name`:接続したいデータベース名

これらを 1 本の文字列にまとめたものが SQLALCHEMY_DATABASE_URI で、

Flask + SQLAlchemy ではこれを設定しておくと、自動的にその DB に接続してくれます。


# ざっくりイメージ


人間でいうと、


> 「どの建物(host)の、何階(name)の、どの部屋(user)に、どの鍵(password)で入るか」

を 1 本のメモにまとめておく感じです。


---


2. ハードコードの危険さ(やりがちポイント)


上のコードは、学習用としては分かりやすい 反面、そのまま本番環境に使うと危険です。


理由はシンプルで、


> パスワードなどの「秘密情報」が、コードにそのまま書かれている

からです。


  • GitHub にあげてしまうと、世界中にパスワードを公開しているのと同じになる
  • うっかりスクショを貼ったり、ブログに載せたりしがち
  • パスワードを変えたくなったときに、コードの中身も書き換えないといけない

なので、本番で使うときは必ず「環境変数」に逃がすのが基本ルールになります。


---


3. 環境変数を使った安全な書き方


Flask で環境変数を読むには、os モジュールを使うのが定番です。


import os

DB_INFO = {
    "user": os.getenv("DB_USER", "postgres"),
    "password": os.getenv("DB_PASSWORD", ""),
    "host": os.getenv("DB_HOST", "localhost"),
    "name": os.getenv("DB_NAME", "postgres"),
}

SQLALCHEMY_DATABASE_URI = (
    f'postgresql+psycopg://{DB_INFO["user"]}:{DB_INFO["password"]}'
    f'@{DB_INFO["host"]}/{DB_INFO["name"]}'
)

ポイントはこの 2 つです。


  • `os.getenv("DB_USER", "postgres")` のように、**環境変数がなかったらデフォルト値を使う**ようにしておく
  • 実際のパスワードは `.env` やサーバーの設定画面にだけ書き、**コードには書かない**

# .env ファイルのイメージ


ローカル開発なら、プロジェクト直下に .env を置いて、こんな感じで書きます。


DB_USER=postgres
DB_PASSWORD=super-secret-password
DB_HOST=localhost
DB_NAME=postgres

Git 管理するときは .gitignore.env を入れておくのもお約束です。


---


4. 接続エラーが出たときのチェックリスト


初心者の自分がよくハマるポイントを、チェックリストにしておきます。


1. ユーザー名・パスワードは合っているか

- psql コマンドや GUI ツール(pgAdmin など)でログインできるか試す

2. ホスト名・ポートは正しいか

- Docker を使っているなら db など、コンテナ名になっている場合も多い

3. データベースが起動しているか

- Docker なら docker ps でコンテナが動いているか確認

4. URI のスペルミスをしていないか

- postgresql+psycopg:// の綴りミスで地味にハマりがち


「コードは合っているのに繋がらない」ときは、大体このあたりでミスっています…。


---


5. 今日の学びまとめ


  • Flask + SQLAlchemy では、**接続文字列(URI)** に DB の情報をまとめて設定する
  • パスワードなどの秘密情報を **コードに直書きするのは NG**。環境変数に逃がすのが基本
  • `.env` + `os.getenv` の組み合わせを覚えておくと、他のフレームワークでも応用できる
  • 接続エラーが出たら、「ユーザー/パス」「ホスト名」「DB 起動有無」「URI のスペル」を順番に疑う

自分と同じように Flask + PostgreSQL の接続でつまずいている人のヒントになれば嬉しいです。

次回は、実際にモデルを定義してデータを読み書きするところまで進めてみようと思います。

この記事をシェア

💬 コメント (0)

読み込み中...

💬 コメントを投稿

0 / 1000 文字

※ コメントは承認後に表示されます。スパム対策のため、URLを含むコメントは自動的に承認待ちになります。

著者情報

トシぼう

トシぼう

東京でのサラリーマン生活を経て、2024年に北海道へ移住したアラフォー見習いエンジニア。 「技術×節約×資産形成」をテーマに、自由で豊かなライフスタイルを模索中。 テスターとして1年経験を積んだ後、開発現場(SES)に参画。Linux, Docker, Gitなどのモダンな開発フローをOJTで習得中です。 記事内容に誤りや古い情報があれば、随時修正していきますので、気になる点があればお気軽にコメントやお問い合わせから教えていただけると嬉しいです。

今日やったFlaskのこと | トシぼうのブログ