init commit

This commit is contained in:
2025-12-18 05:55:32 +09:00
commit a6817e487e
72 changed files with 13847 additions and 0 deletions

70
migrate_db.py Normal file
View File

@@ -0,0 +1,70 @@
"""
Инструкции по обновлению схемы БД при изменении моделей
ВАЖНО: Этот проект использует SQLAlchemy ORM, поэтому изменения моделей
требуют обновления БД. Используйте один из методов ниже.
"""
import asyncio
from app.database import engine
from app.models import Base
async def drop_all_tables():
"""
⚠️ ОПАСНО: Удаляет все таблицы из БД
Используйте только для разработки!
"""
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.drop_all)
print("Все таблицы удалены")
async def create_all_tables():
"""
Создает все таблицы на основе моделей
Безопасно использовать - не удаляет существующие таблицы
"""
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
print("Все таблицы созданы/обновлены")
async def reset_db():
"""
Полный сброс БД: удаляет все и создает заново
⚠️ Используйте только если вам не нужны старые данные
"""
print("⚠️ Сброс БД...")
await drop_all_tables()
await create_all_tables()
print("✅ БД полностью восстановлена")
async def main():
"""Интерактивное меню"""
print("\n" + "=" * 60)
print("УПРАВЛЕНИЕ БД")
print("=" * 60)
print("\n1. Создать/обновить таблицы")
print("2. Полный сброс БД (удалить все данные)")
print("3. Выход")
choice = input("\nВыберите действие (1-3): ").strip()
if choice == "1":
await create_all_tables()
elif choice == "2":
confirm = input("\n⚠️ Вы уверены? Все данные будут удалены (yes/no): ")
if confirm.lower() == "yes":
await reset_db()
else:
print("Отменено")
elif choice == "3":
print("До свидания!")
else:
print("❌ Неверный выбор")
if __name__ == "__main__":
asyncio.run(main())