数字海洋的12天(第2天) – 使用Python连接到您的PostgreSQL数据库

欢迎来到第二天数字海洋的12天!昨天,我们开始构建我们的生日提醒服务——一个简单的应用程序,可以发送即将到来的生日的短信通知。🎉 我们在数字海洋上设置了一个PostgreSQL数据库来存储联系人信息。

今天,我们将使用Python连接到该数据库,并设置我们的项目以保护敏感凭证。

到本帖结束时,您将拥有一个Python脚本,可以安全地从数据库中获取数据,并在我们将其托管在数字海洋上时准备好扩展。

✨ 为什么要这一步?

设置数据库只是开始。要构建任何有意义的应用程序,我们需要一种以编程方式与数据互动的方法。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 的新文件,并设置脚本从 .env 加载凭据,使用 python-dotenv 连接到我们的数据库。

下面是开始的代码:

# 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 工具,请查看 第一天 的说明。

🎁 总结

今天你完成了以下任务:

✅ 安装了所需的 Python 库。
✅ 使用 Python 连接到你的 DigitalOcean PostgreSQL 数据库。
✅ 通过简单查询从 contacts 表中获取数据。

接下来:明天,我们将开始添加逻辑,以查找即将到来的生日并使用 Twilio 发送短信通知。这是应用程序开始活跃的地方——敬请期待! 🚀

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