ウェブサイト検索

12 日間 (2 日目) - Python を使用した PostgreSQL データベースへの接続


12 日間の DigitalOcean 2 日目 へようこそ!昨日、私たちは誕生日リマインダー サービスの構築を開始しました。これは、近い誕生日に SMS 通知を送信するシンプルなアプリです。 🎉 連絡先の詳細を保存するために、DigitalOcean に PostgreSQL データベースをセットアップしました。

今日は、Python を使用してそのデータベースに接続し、機密の資格情報を安全に保つようにプロジェクトを設定します。

この投稿を終えるまでに、データベースからデータを安全に取得し、DigitalOcean でホストするときに拡張できる Python スクリプトが完成します。

✨ なぜこのステップを行うのか?

データベースのセットアップは始まりにすぎませんでした。意味のあるアプリを構築するには、そのデータをプログラムで操作する方法が必要です。 Python を使用すると、PostgreSQL データベースに簡単に接続でき、pg8000 のようなライブラリを利用すると、わずか数行のコードで PostgreSQL データベースを操作できます。

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

🚀 学ぶ内容

今日の計画は次のとおりです。

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

これが終わるまでに、アプリのロジックを構築するための強固な基盤が完成します。

🛠 必要なもの

本題に入る前に、次のものが必要です。

  • 1日目にセットアップしたデータベース。TODO: 1日目のURLへのリンク
  • ローカル マシンにインストールされている Python (Python 3.8 以降を推奨します)。

🧑🍳 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
Load environment variables from .env file
load_dotenv()
Database connection details
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:
    # Connect to the database
    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
Load environment variables from .env file
load_dotenv()
Database connection details
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:
    # Connect to the database
    connection = pg8000.connect(
        host=DB_HOST,
        database=DB_NAME,
        user=DB_USER,
        password=DB_PASSWORD,
        port=DB_PORT
    )
    print("Connection successful!")

    # Query the database
    cursor = connection.cursor()
    query = "SELECT * FROM contacts;"
    cursor.execute(query)
    records = cursor.fetchall()

    # Print the results
    print("Contacts:")
    for record in records:
        print(record)

    # Close the cursor and connection
    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 の使用方法を再確認する必要がある場合、または pgAdmin や TablePlus などの UI ツールを探索したい場合は、1 日目の手順を確認してください。

🎁 まとめ

今日達成したことは次のとおりです。

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

次の予定: 明日、Twilio を使用して今後の誕生日を検索し、SMS 通知を送信するロジックの追加を開始します。ここからアプリが本格的に動き始めます。乞うご期待! 🚀