Модуль базы данных (database)
Обзор
Модуль database.py предоставляет:
Асинхронное подключение к PostgreSQL через asyncpg
Пул подключений для эффективного управления соединениями
CRUD операции для таблицы диалогов
Логирование операций с базой данных
Архитектура базы данных
Класс Database
Методы 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- при ошибках в запросах к базе данных
Смотрите также
Модуль обработчиков (handlers) - Использование базы данных в обработчиках
Установка и запуск - Настройка PostgreSQL в Docker