Как подключиться к PostgreSQL через Python: подробное руководство

PostgreSQL — это мощная объектно-реляционная система управления базами данных (СУБД). Она широко используется благодаря своей надежности, открытости и возможностям адаптации под множество сценариев. Подключение к PostgreSQL через Python позволяет программистам выполнять разнообразные операции с данными напрямую из скриптов или приложений.

В данной статье мы рассмотрим, как сделать это шаг за шагом.

Установка необходимых библиотек

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

PostgreSQL

Чтобы установить PostgreSQL на ваш локальный компьютер, следуйте этим инструкциям:

  1. Загрузите и запустите установочный пакет PostgreSQL.
  2. Следуйте инструкциям мастера установки, выберите необходимые компоненты и установите их.
  3. Проверьте установку, запустив PostgreSQL и авторизовавшись в системе.
  4. Создайте новую базу данных командой:
createdb mydatabase

Библиотека psycopg2

psycopg2 — это адаптер базы данных PostgreSQL для языка программирования Python. Для его установки используйте pip:

pip install psycopg2-binary

Создание базы данных и таблицы

Подключение к PostgreSQL

Для того чтобы подключиться к базе данных, создайте файл db_connection.py и добавьте следующий код:

import psycopg2
from typing import Optional


def connect_db(
    dbname: str, user: str, password: str, host: str = "localhost", port: int = 5432
) -> Optional[psycopg2.extensions.connection]:
    """
    Подключение к базе данных PostgreSQL.

    :param dbname: Имя базы данных
    :param user: Имя пользователя
    :param password: Пароль пользователя
    :param host: Адрес сервера
    :param port: Порт сервера
    :return: Объект подключения к базе данных
    """
    try:
        conn = psycopg2.connect(
            dbname=dbname, user=user, password=password, host=host, port=port
        )
        return conn
    except Exception as e:
        print(f"Ошибка подключения к базе данных: {e}")
        return None

Создание таблицы

Теперь создадим простую таблицу в PostgreSQL с помощью Python:

def create_table(conn: psycopg2.extensions.connection, table_name: str) -> None:
    """
    Создание таблицы в базе данных.

    :param conn: Объект подключения к базе данных
    :param table_name: Имя таблицы
    """
    with conn.cursor() as cur:
        cur.execute(f"""
        CREATE TABLE IF NOT EXISTS {table_name} (
            id SERIAL PRIMARY KEY,
            name VARCHAR(100),
            age INT
        );
        """)
        conn.commit()

Основные операции с данными

Вставка данных

Для вставки данных в таблицу используем параметризованный запрос:

def insert_data(
    conn: psycopg2.extensions.connection, table_name: str, name: str, age: int
) -> None:
    """
    Вставка данных в таблицу.

    :param conn: Объект подключения к базе данных
    :param table_name: Имя таблицы
    :param name: Имя пользователя
    :param age: Возраст пользователя
    """
    with conn.cursor() as cur:
        cur.execute(
            f"INSERT INTO {table_name} (name, age) VALUES (%s, %s)", (name, age)
        )
        conn.commit()

Чтение данных

Выполнение SELECT-запросов и обработка результатов:

def read_data(conn: psycopg2.extensions.connection, table_name: str) -> list:
    """
    Чтение данных из таблицы.

    :param conn: Объект подключения к базе данных
    :param table_name: Имя таблицы
    :return: Список записей из базы данных
    """
    with conn.cursor() as cur:
        cur.execute(f"SELECT * FROM {table_name}")
        return cur.fetchall()

Обновление и удаление данных

Примеры кода для обновления и удаления данных:

def update_data(
    conn: psycopg2.extensions.connection, table_name: str, user_id: int, new_age: int
) -> None:
    """
    Обновление данных в таблице.

    :param conn: Объект подключения к базе данных
    :param table_name: Имя таблицы
    :param user_id: Идентификатор пользователя
    :param new_age: Новый возраст пользователя
    """
    with conn.cursor() as cur:
        cur.execute(
            f"UPDATE {table_name} SET age = %s WHERE id = %s", (new_age, user_id)
        )
        conn.commit()


def delete_data(
    conn: psycopg2.extensions.connection, table_name: str, user_id: int
) -> None:
    """
    Удаление данных из таблицы.

    :param conn: Объект подключения к базе данных
    :param table_name: Имя таблицы
    :param user_id: Идентификатор пользователя
    """
    with conn.cursor() as cur:
        cur.execute(f"DELETE FROM {table_name} WHERE id = %s", (user_id,))
        conn.commit()

Работа с транзакциями

Транзакции позволяют выполнять несколько операций как единую последовательность. Пример использования транзакций:

def perform_transaction(conn: psycopg2.extensions.connection) -> None:
    """
    Выполнение транзакции в базе данных.

    :param conn: Объект подключения к базе данных
    """
    try:
        with conn:
            with conn.cursor() as cur:
                cur.execute(
                    "INSERT INTO mytable (name, age) VALUES (%s, %s)", ("User1", 30)
                )
                cur.execute(
                    "INSERT INTO mytable (name, age) VALUES (%s, %s)", ("User2", 25)
                )
    except Exception as e:
        print(f"Ошибка выполнения транзакции: {e}")

Типизация данных в Python

Использование аннотации типов в функциях, работающих с PostgreSQL, помогает улучшить читаемость и качество кода. Пример использования типизации мы уже видели в предыдущих функциях.

Обработка ошибок

Примеры обработки ошибок при работе с базой данных:

def safe_query_execution(conn: psycopg2.extensions.connection, query: str) -> None:
    """
    Безопасное выполнение запроса к базе данных.

    :param conn: Объект подключения к базе данных
    :param query: SQL-запрос
    """
    try:
        with conn.cursor() as cur:
            cur.execute(query)
            conn.commit()
    except Exception as e:
        print(f"Ошибка выполнения запроса: {e}")

Заключение

В данной статье мы рассмотрели основные шаги по подключению к PostgreSQL через Python: от установки необходимых библиотек до выполнения CRUD операций и работы с транзакциями. Продолжайте изучать данное направление, используя документацию и материалы из раздела «Дополнительные ресурсы».


Добавить комментарий