bd - api
This commit is contained in:
145
database/example.py
Normal file
145
database/example.py
Normal file
@@ -0,0 +1,145 @@
|
||||
"""
|
||||
Пример использования базы данных
|
||||
"""
|
||||
|
||||
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🔒 Подключение к базе данных закрыто")
|
||||
Reference in New Issue
Block a user