デジタルオーシャンの12日間(第2日) – Pythonを使ってPostgreSQLデータベースに接続する

ようこそ、第2日デジタルオーシャンの12日間へ!昨日、私たちは誕生日リマインダーサービスの構築を始めました。これは、今後の誕生日のためにSMS通知を送信するシンプルなアプリです。🎉 デジタルオーシャンにPostgreSQLデータベースを設定し、連絡先の詳細を保存しました。

今日は、Pythonを使ってそのデータベースに接続し、プロジェクトを設定して敏感な認証情報を安全に保つ方法を見ていきます。

この記事の終わりまでには、データベースから安全にデータを取得し、デジタルオーシャンでホストする際にスケールの準備ができているPythonスクリプトを手に入れることができます。

✨ なぜこのステップ?

データベースの設定は始まりに過ぎません。意味のあるアプリを構築するためには、そのデータにプログラム的にアクセスする方法が必要です。PythonはPostgreSQLデータベースに接続するのを簡単にしてくれますし、pg8000のようなライブラリの助けを借りれば、数行のコードでPostgreSQLデータベースを扱うことができます。

安全を保つために、データベースの資格情報を.envファイルに保存し、python-dotenvを使用してスクリプトに読み込むことにします。これにより、資格情報がスクリプトにハードコーディングされることがなくなり、アプリを共有したり展開したりする際に安全性が向上します。

🚀 学べること

今日の計画は以下の通りです:

  1. 機密資格情報を.envファイルに保存します。
  2. python-dotenvを使用して、これらの資格情報をスクリプトに読み込みます。
  3. Pythonスクリプトを書いて、pg8000を使用してPostgreSQLデータベースに安全に接続します。
  4. contactsテーブルからデータを取得して表示します。

これを終える頃には、アプリのロジックを構築するためのしっかりとした基盤ができるでしょう。

🛠 必要なもの

始める前に、必要なものは以下の通りです:

🧑‍🍳 2日目のレシピ: PythonでPostgreSQLに接続する

ステップ1: 必要なライブラリをインストールする 📦

PythonをPostgreSQLに接続し、資格情報を安全に保つために、2つの重要なライブラリを使用します:

  • pg8000: PostgreSQLデータベースに接続し、操作するための純粋なPythonライブラリです。
  • python-dotenv: データベースのユーザー名やパスワードなどの機密資格情報を.envファイルから読み込むためのユーティリティで、スクリプトにハードコーディングする必要がありません。

さあ、今すぐインストールしましょう。ターミナルでこのコマンドを実行してください:

pip install pg8000 python-dotenv

プロのヒント: 仮想環境を使用している場合(常に良いアイデアです!)、上記のコマンドを実行する前に仮想環境をアクティブにして、依存関係を整理してください。

ステップ2: .envファイルを作成する 📂

プロジェクトディレクトリに、.envという名前のファイルを作成します。ここにデータベースの認証情報を保存します。次の内容を追加してください:

DB_HOST=<your-hostname>
DB_NAME=<your-database-name>
DB_USER=<your-username>
DB_PASSWORD=<your-password>

プレースホルダーの値を1日目からの認証情報に置き換えます。

プロのヒント: 認証情報が誤ってバージョン管理にプッシュされないように、.env.gitignoreファイルに追加してください。

ステップ3: Pythonスクリプトを作成する 🐍

connect_to_db.pyという新しいファイルを作成し、python-dotenvを使用して.envから認証情報を読み込み、データベースに接続するスクリプトを設定します。

始めるためのコードは次のとおりです:

# connect_to_db.py

import pg8000
from dotenv import load_dotenv
import os

# .envファイルから環境変数を読み込む
load_dotenv()

# データベース接続の詳細
DB_HOST = os.getenv("DB_HOST")
DB_NAME = os.getenv("DB_NAME")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_PORT = int(os.getenv("DB_PORT"))

try:
    # データベースに接続する
    connection = pg8000.connect(
        host=DB_HOST,
        database=DB_NAME,
        user=DB_USER,
        password=DB_PASSWORD,
        port=DB_PORT
    )
    print("Connection successful!")
except Exception as e:
    print("An error occurred while connecting to the database:", e)
finally:
    if connection:
        connection.close()

このスクリプトは、いくつかの重要なことを行います:

  • あなたの.envファイルから安全に認証情報を読み込みます。
  • データベースへの接続を確立するには、pg8000.connect()を使用します。
  • 結果に応じて成功またはエラーメッセージを表示します。

ステップ4: 接続をテスト ✅

さて、すべてが正常に機能することを確認しましょう。スクリプトを実行します:

python connect_to_db.py

すべてが正しく設定されていれば、次のように表示されます:

Connection successful!

エラーが発生した場合:

  • .envファイルの値を再確認してください。
  • データベースの信頼されたソースにあなたのIPアドレスが追加されていることを確認してください(1日目のステップ6を参照)。

ステップ5: データベースからデータを取得 🔍

さて、データを取得するためにスクリプトを拡張しましょう。connect_to_db.pyスクリプトを次のように更新します:

# connect_to_db.py

import pg8000
from dotenv import load_dotenv
import os

# .envファイルから環境変数を読み込む
load_dotenv()

# データベース接続の詳細
DB_HOST = os.getenv("DB_HOST")
DB_NAME = os.getenv("DB_NAME")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_PORT = int(os.getenv("DB_PORT"))

try:
    # データベースに接続する
    connection = pg8000.connect(
        host=DB_HOST,
        database=DB_NAME,
        user=DB_USER,
        password=DB_PASSWORD,
        port=DB_PORT
    )
    print("Connection successful!")

    # データベースをクエリする
    cursor = connection.cursor()
    query = "SELECT * FROM contacts;"
    cursor.execute(query)
    records = cursor.fetchall()

    # 結果を印刷する
    print("Contacts:")
    for record in records:
        print(record)

    # カーソルと接続を閉じる
    cursor.close()
    connection.close()

except Exception as e:
    print("An error occurred:", e)

このスクリプトは現在:

  • 連絡先テーブルからすべてのレコードを取得するクエリを実行します。
  • 各レコードをコンソールに印刷します。

注意: テーブルが空でも心配ありません! スクリプトがエラーなしで実行されることを確認できます。テストのために、psql(またはお好みのツール)を使用してデータベースを開き、このSQLコマンドを実行することでサンプル連絡先をすぐに追加できます:

INSERT INTO contacts (first_name, last_name, birthday) 
VALUES ('Test', 'User', '1990-01-01');

psqlの使い方を復習したい場合や、pgAdminTablePlusのようなUIツールを探求したい場合は、Day 1の指示を確認してください。

🎁 まとめ

今日は以下のことを達成しました:

✅ 必要なPythonライブラリをインストールしました。
✅ Pythonを使用してDigitalOceanのPostgreSQLデータベースに接続しました。
✅ 簡単なクエリでcontactsテーブルからデータを取得しました。

次に:明日、今後の誕生日を見つけてSMS通知を送信するロジックを追加します。Twilioを使用します。ここからアプリが活気づき始めます—お楽しみに!🚀

Source:
https://www.digitalocean.com/community/tutorials/connecting-to-postgresql-database-with-python