Модуль базы данных (database)

Обзор

Модуль database.py предоставляет:

  • Асинхронное подключение к PostgreSQL через asyncpg

  • Пул подключений для эффективного управления соединениями

  • CRUD операции для таблицы диалогов

  • Логирование операций с базой данных

Архитектура базы данных

Класс Database

class Database

Основной класс для работы с базой данных.

Атрибуты:

pool

Пул подключений asyncpg.Pool (Optional)

Методы Database

Database.init_pool()

Инициализирует пул подключений к базе данных.

Raises:

  • Exception - если подключение не удалось

  • RuntimeError - если таблицы не существуют

Database.start_dialog() int

Создает новую запись о начале диалога.

Returns:

  • int - ID созданного диалога

Raises:

  • RuntimeError - если пул не инициализирован

Database.end_dialog(dialog_id: int, state: str = 'completed')

Отмечает диалог как завершенный.

Parameters:

  • dialog_id - ID диалога для завершения

  • state - Финальное состояние диалога

Raises:

  • RuntimeError - если пул не инициализирован

Database.update_dialog_state(dialog_id: int, state: str)

Обновляет состояние диалога.

Parameters:

  • dialog_id - ID диалога для обновления

  • state - Новое состояние диалога

Database.close()

Закрывает пул подключений.

Глобальный экземпляр

db

Глобальный экземпляр класса Database для использования во всем приложении.

Схема таблицы dialogs

CREATE TABLE conversations.dialogs (
    id BIGSERIAL PRIMARY KEY,
    start_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    end_time TIMESTAMP NULL,
    dialog_state VARCHAR(50) NOT NULL
);

Состояния диалогов

Пример использования

# Инициализация базы данных
await db.init_pool()

# Начало диалога
dialog_id = await db.start_dialog()

# Обновление состояния
await db.update_dialog_state(dialog_id, "section_self_knowledge")

# Завершение диалога
await db.end_dialog(dialog_id, "completed")

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

Все методы класса Database логируют ошибки и пробрасывают исключения:

  • RuntimeError - при попытке использования неинициализированного пула

  • asyncpg.PostgresError - при ошибках в запросах к базе данных

Смотрите также