數位海洋12天(第2天) – 使用Python連接到您的PostgreSQL資料庫

歡迎來到第二天12天的DigitalOcean!昨天,我們開始建設我們的生日提醒服務——一個簡單的應用程式,可以發送即將到來的生日的SMS通知。🎉 我們在DigitalOcean上設置了一個PostgreSQL數據庫來存儲聯絡資料。

今天,我們將使用Python連接到該數據庫,並設置我們的項目以保護敏感憑證。

在這篇文章結束時,您將擁有一個Python腳本,能夠安全地從您的數據庫中獲取數據,並在我們將其托管在DigitalOcean時準備好擴展。

✨ 為什麼這一步?

設置數據庫只是個開始。要構建任何有意義的應用程式,我們需要一種以程式化方式與這些數據互動的方法。Python使得連接到PostgreSQL數據庫變得簡單,借助像pg8000這樣的庫,我們可以用幾行代碼來處理PostgreSQL數據庫。

為了保持安全,我們將把數據庫憑證存儲在 .env 文件中,並使用 python-dotenv 將其加載到我們的腳本中。這確保了您的憑證不會硬編碼到腳本中,使得分享和部署應用程序更加安全。

🚀 您將學到的內容

今天的計劃如下:

  1. 將敏感憑證存儲在 .env 文件中。
  2. 使用 python-dotenv 將這些憑證加載到您的腳本中。
  3. 編寫 Python 腳本以安全地連接到您的 PostgreSQL 數據庫,使用 pg8000
  4. contacts 表中提取並顯示數據

到最後,您將擁有構建應用邏輯的堅實基礎。

🛠 您將需要的內容

在深入之前,這是您需要的內容:

  • 我們在 第一天 設置的數據庫。 TODO: 連結到第一天的 URL
  • 在您的本機上安裝 Python(我們建議使用 Python 3.8 以上版本)。

🧑‍🍳 第二天食譜:使用 Python 連接 PostgreSQL

步驟 1:安裝所需的庫 📦

為了將 Python 連接到 PostgreSQL 並保護我們的憑證,我們將使用兩個關鍵庫:

  • pg8000:一個純 Python 庫,允許您連接並與 PostgreSQL 數據庫互動。
  • 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>

第一天 的憑證替換佔位符值。

專業提示:.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 工具,請參考 第 1 天 的說明。

🎁 總結

今天您完成了以下事項:

✅ 安裝了所需的 Python 函式庫。
✅ 使用 Python 連接到您的 DigitalOcean PostgreSQL 數據庫。
✅ 通過簡單的查詢從 contacts 表中獲取數據。

接下來: 明天,我們將開始添加邏輯來查找即將到來的生日並使用 Twilio 發送簡訊通知。這是應用程式開始活躍的時刻—敬請期待! 🚀

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