Files
bot-telegram/database/example.py
2025-09-14 22:09:39 +05:00

145 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Пример использования базы данных
"""
import os
import sys
from pathlib import Path
# Добавляем путь к проекту в PYTHONPATH
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))
from database.database import db, test_db_connection
from database.services import db_service, setup_database
import logging
# Настройка логирования
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def main():
"""Основная функция для демонстрации работы с базой данных"""
print("🚀 Пример работы с PostgreSQL через SQLAlchemy")
print("=" * 50)
# 1. Тестирование подключения
print("1. Тестирование подключения к базе данных...")
if test_db_connection():
print("✅ Подключение успешно!")
else:
print("❌ Ошибка подключения!")
return
# 2. Настройка базы данных (создание таблиц)
print("\n2. Настройка базы данных...")
if setup_database():
print("✅ База данных настроена!")
else:
print("❌ Ошибка настройки базы данных!")
return
# 3. Работа с пользователями
print("\n3. Работа с пользователями...")
# Регистрация пользователя
user, created = db_service.register_user(
telegram_id=123456789,
username="test_user",
first_name="Иван",
last_name="Иванов"
)
print(f"Пользователь: {user.first_name} {user.last_name} (@{user.username})")
print(f"Создан новый: {'Да' if created else 'Нет'}")
# Повторная регистрация (должен вернуть существующего)
user2, created2 = db_service.register_user(
telegram_id=123456789,
username="test_user_updated"
)
print(f"Повторная регистрация - создан новый: {'Да' if created2 else 'Нет'}")
# 4. Работа с сообщениями
print("\n4. Работа с сообщениями...")
# Сохранение сообщения
message = db_service.save_message(
telegram_message_id=1001,
telegram_user_id=123456789,
text="Привет! Это тестовое сообщение",
message_type="text"
)
print(f"Сообщение сохранено: ID {message.id if message else 'Ошибка'}")
# Получение сообщений пользователя
messages = db_service.get_user_messages(123456789, limit=10)
print(f"Количество сообщений пользователя: {len(messages)}")
# 5. Работа с настройками
print("\n5. Работа с настройками...")
# Установка настройки
db_service.set_setting("welcome_message", "Добро пожаловать в бот!", "Приветственное сообщение")
# Получение настройки
welcome_msg = db_service.get_setting("welcome_message", "Привет!")
print(f"Приветственное сообщение: {welcome_msg}")
# 6. Статистика
print("\n6. Статистика...")
user_count = db_service.get_user_count()
print(f"Всего пользователей: {user_count}")
print("\n✅ Демонстрация завершена успешно!")
def example_usage_in_telegram_bot():
"""Пример использования в телеграм боте"""
print("\n" + "=" * 50)
print("📱 Пример использования в телеграм боте:")
print("=" * 50)
# Имитация обработки сообщения от пользователя
telegram_user_id = 987654321
message_text = "Какая сегодня погода?"
# 1. Регистрируем/получаем пользователя
user, created = db_service.register_user(
telegram_id=telegram_user_id,
username="weather_user",
first_name="Мария"
)
if created:
print(f"🆕 Новый пользователь: {user.first_name}")
# Отправляем приветственное сообщение
welcome_msg = db_service.get_setting("welcome_message", "Привет!")
print(f"Отправляем: {welcome_msg}")
# 2. Сохраняем сообщение
message = db_service.save_message(
telegram_message_id=2001,
telegram_user_id=telegram_user_id,
text=message_text
)
print(f"💬 Сохранено сообщение: '{message_text[:30]}...'")
# 3. Обновляем активность пользователя
db_service.update_user_info(telegram_user_id, is_active=True)
print("✅ Обработка сообщения завершена")
if __name__ == "__main__":
try:
main()
example_usage_in_telegram_bot()
except Exception as e:
logger.error(f"Ошибка в примере: {e}")
print(f"❌ Ошибка: {e}")
finally:
# Закрываем подключение
db.close()
print("\n🔒 Подключение к базе данных закрыто")