12 дней DigitalOcean (День 2) – Подключение к вашей базе данных PostgreSQL с помощью Python

Добро пожаловать на День 2 12 Дней DigitalOcean! Вчера мы начали создавать наш Сервис Напоминания о Дне Рождения — простое приложение, которое отправляет SMS-уведомления о предстоящих днях рождения. 🎉 Мы настроили базу данных PostgreSQL на DigitalOcean для хранения контактных данных.

Сегодня мы подключимся к этой базе данных, используя Python, и настроим наш проект для безопасного хранения конфиденциальных данных.

К концу этого поста у вас будет скрипт на Python, который безопасно извлекает данные из вашей базы данных и готов к масштабированию, когда мы разместим его на DigitalOcean.

✨ Почему этот шаг важен?

Настройка базы данных была только началом. Чтобы создать какое-либо значимое приложение, нам нужен способ программно взаимодействовать с этими данными. Python упрощает подключение к базам данных PostgreSQL, а с помощью библиотеки, такой как pg8000, мы можем работать с базами данных PostgreSQL всего в нескольких строках кода.

Чтобы обеспечить безопасность, мы будем хранить наши учетные данные базы данных в файле .env и загружать их в наш скрипт с помощью python-dotenv. Это гарантирует, что ваши учетные данные не будут жестко закодированы в скрипте, что делает его безопаснее для обмена и развертывания вашего приложения.

🚀 Что вы узнаете

Вот план на сегодня:

  1. Храните конфиденциальные учетные данные в файле .env.
  2. Используйте python-dotenv, чтобы загрузить эти учетные данные в ваш скрипт.
  3. Напишите скрипт на Python для безопасного подключения к вашей базе данных PostgreSQL с использованием pg8000
  4. Извлеките и отобразите данные из таблицы contacts

К концу этого у вас будет прочная основа для построения логики приложения.

🛠 Что вам понадобится

Прежде чем приступить, вот что вам понадобится:

  • База данных, которую мы настроили на День 1. TODO: Ссылка на URL дня 1
  • Python установлен на вашем локальном компьютере (рекомендуем Python 3.8+).

🧑‍🍳 Рецепт на День 2: Подключение к PostgreSQL с помощью Python

Шаг 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>

Замените значения-заполнители учетными данными из Дня 1.

Совет: Добавьте .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-адрес добавлен в доверенные источники базы данных (см. Шаг 6 из Дня 1).

Шаг 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, или вы хотите исследовать инструменты с графическим интерфейсом, такие как pgAdmin или TablePlus, ознакомьтесь с инструкциями в День 1.

🎁 Завершение

Вот что вы достигли сегодня:

✅ Установлены необходимые библиотеки Python.
✅ Подключились к вашей базе данных PostgreSQL на DigitalOcean с помощью Python.
✅ Получили данные из таблицы contacts с помощью простого запроса.

Следующее: Завтра мы начнем добавлять логику для поиска предстоящих дней рождения и отправки SMS-уведомлений с использованием Twilio. Вот где приложение начинает оживать — оставайтесь с нами! 🚀

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