Работа с PostgreSQL - Python с нуля до Junior: Путь к первой работе в IT - Qpel.AI

PostgreSQL — мощная, бесплатная и надёжная система управления базами данных (СУБД). Её используют в серьёзных проектах, где важны производительность и сохранность данных. В отличие от SQLite, которую мы могли бы взять для простых задач, PostgreSQL — это стандарт индустрии для сложных и высоконагруженных систем.

Почему PostgreSQL?

Мы выбрали PostgreSQL не просто так. Вот почему:

  • Надёжность: Ваши данные под защитой. Это критически важно для любого приложения.
  • Гибкость: Можно добавлять свои функции, типы данных и даже языки программирования.
  • Стандарты SQL: PostgreSQL строго следует стандартам SQL. Это упрощает переход между разными СУБД.
  • Сообщество: Огромное сообщество разработчиков и пользователей всегда готово помочь и развивать проект.
  • Бесплатно: Открытый исходный код означает, что нет лицензионных платежей. Вы можете изучать, как всё работает изнутри.

Важно: Чтобы работать с PostgreSQL, нужен установленный сервер.

  • Windows: Скачайте установщик с официального сайта.
  • Linux/macOS: Используйте менеджер пакетов. Например, sudo apt install postgresql для Ubuntu или brew install postgresql для macOS.

Подключаемся к PostgreSQL из Python

Для работы с PostgreSQL из Python используем библиотеку psycopg2. Это один из самых популярных и надёжных адаптеров.

Сначала установим её:

pip install psycopg2-binary

Теперь напишем код для подключения к базе данных и выполнения запросов.

import psycopg2

# Данные для подключения к базе данных
# В реальных проектах их хранят в переменных окружения или конфигах.
# Для примера укажем напрямую.
DB_NAME = "your_database_name" # Замените на имя вашей БД
DB_USER = "your_username"      # Замените на ваше имя пользователя
DB_PASSWORD = "your_password"  # Замените на ваш пароль
DB_HOST = "localhost"
DB_PORT = "5432"

conn = None # Инициализируем conn и cur вне try, чтобы они были доступны в finally
cur = None

try:
    # Устанавливаем соединение
    conn = psycopg2.connect(
        dbname=DB_NAME,
        user=DB_USER,
        password=DB_PASSWORD,
        host=DB_HOST,
        port=DB_PORT
    )
    # Создаем курсор. Он позволяет выполнять SQL-запросы.
    cur = conn.cursor()

    # Создаем таблицу users, если её нет
    cur.execute("""
        CREATE TABLE IF NOT EXISTS users (
            id SERIAL PRIMARY KEY,
            name VARCHAR(100) NOT NULL,
            email VARCHAR(100) UNIQUE NOT NULL
        )
    """)
    conn.commit() # Сохраняем изменения
    print("Таблица 'users' успешно создана или уже существует.")

    # Вставляем данные
    cur.execute("INSERT INTO users (name, email) VALUES (%s, %s)", ("Иван Иванов", "ivan@example.com"))
    cur.execute("INSERT INTO users (name, email) VALUES (%s, %s)", ("Мария Петрова", "maria@example.com"))
    conn.commit()
    print("Данные успешно вставлены.")

    # Выбираем данные
    cur.execute("SELECT id, name, email FROM users")
    users = cur.fetchall() # Получаем все строки
    print("\nСписок пользователей:")
    for user in users:
        print(f"ID: {user[0]}, Имя: {user[1]}, Email: {user[2]}")

    # Обновляем данные
    cur.execute("UPDATE users SET email = %s WHERE name = %s", ("ivan_new@example.com", "Иван Иванов"))
    conn.commit()
    print("\nEmail Ивана Иванова обновлен.")

    # Удаляем данные
    cur.execute("DELETE FROM users WHERE name = %s", ("Мария Петрова",))
    conn.commit()
    print("Мария Петрова удалена из базы данных.")

except Exception as e:
    print(f"Произошла ошибка: {e}")
    if conn: # Проверяем, что соединение установлено
        conn.rollback() # Откатываем изменения при ошибке
finally:
    # Закрываем курсор и соединение
    if cur:
        cur.close()
    if conn:
        conn.close()
    print("Соединение с базой данных закрыто.")

Ваше первое задание:

  1. Установите PostgreSQL на свой компьютер.
  2. Создайте новую базу данных и пользователя (например, через утилиту psql или графический интерфейс pgAdmin).
  3. Замените your_database_name, your_username, your_password в коде на свои данные.
  4. Запустите скрипт. Убедитесь, что он подключается, создаёт таблицу, вставляет, выбирает, обновляет и удаляет данные.
  5. Попробуйте добавить в таблицу новое поле, например, age INT, и вставлять данные с ним.

Управление транзакциями

В коде вы видели conn.commit() и conn.rollback(). Это основа транзакций.

  • Транзакция — это группа операций, которая выполняется как одно целое. Либо все операции проходят успешно (commit), либо ни одна из них не выполняется (rollback).
  • conn.commit(): Сохраняет все изменения в базе данных.
  • conn.rollback(): Отменяет все изменения, возвращая базу данных к исходному состоянию.

Транзакции критически важны для сохранения целостности данных, особенно в системах, где с базой работают много пользователей одновременно.

Теперь, когда вы освоили основы работы с PostgreSQL и SQL-запросами из Python, мы готовы двигаться дальше. В следующем разделе мы погрузимся в архитектуру Django и поймём, как он упрощает взаимодействие с базами данных, используя всё, что мы узнали.