Files
TG_autoposter/migrate_db.py
2025-12-18 05:55:32 +09:00

71 lines
2.4 KiB
Python
Raw Permalink 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.

"""
Инструкции по обновлению схемы БД при изменении моделей
ВАЖНО: Этот проект использует 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())