init commit
This commit is contained in:
70
migrate_db.py
Normal file
70
migrate_db.py
Normal 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())
|
||||
Reference in New Issue
Block a user