새로 적용된 Django 마이그레이션을 어떻게 되돌리나요?
전통적인 방법
이 예에서는
polls
앱이 있고 이 앱이 마이그레이션을 관리하려는 앱이라고 가정합니다. Django는 이 주제에 대해서도 많은 훌륭한 기능documentation을 가지고 있습니다.먼저
showmigrations
명령을 사용하여 현재 마이그레이션이 어떤 모습인지 확인해 보겠습니다.python manage.py showmigrations polls
polls
[X] 0001_initial
[X] 0002_question1
[X] 0003_person
적용된 이전 마이그레이션은
0002_question1
이므로 Django에 다시 마이그레이션하도록 지시하기만 하면 됩니다. 이것은 migrate
명령으로 수행할 수 있습니다.python manage.py migrate polls 0002_question1
Operations to perform:
Target specific migration: 0002_question1, from polls
Running migrations:
Rendering model states... DONE
Unapplying polls.0003_person... OK
이제 데이터베이스가 마이그레이션 상태
0002_question1
로 되돌아갔어야 하며 showmigrations
를 다시 사용하여 이를 확인할 수 있습니다.python manage.py showmigrations polls
polls
[X] 0001_initial
[X] 0002_question1
[ ] 0003_person
전체 데이터베이스도 재설정하려면
python manage.py migrate polls zero
를 사용하여 0001_initial
로 되돌릴 수 있습니다.하지만 마이그레이션이 무엇인지 확인하지 않고 이전 마이그레이션으로 돌아가려면 어떻게 해야 합니까?
그리고 이 질문은 제가 스스로에게 물어본 것이기도 합니다. Django 프레임워크는 이 기능을 즉시 제공하지 않습니다.
git 리포지토리로 마이그레이션을 커밋하고 다른 팀이 테스트할 수 있도록 몇 대의 서버를 공유하는 소규모 팀이라고 가정해 보겠습니다. 발생할 수 있는 문제는 git 기본 브랜치에 없는 다른 마이그레이션을 가진 다른 팀입니다. 이로 인해 배포 중에 몇 가지 실망스러운 문제가 발생할 수 있으며 데이터베이스가 마이그레이션 파일과 매우 빠르게 동기화되지 않을 수 있습니다(특히 데이터베이스가 매번 다시 작성되지 않는 경우).
이것이 내가 django-migration-rollback 앱을 만든 이유입니다. 일부 사용자 지정 Django 명령을 사용하면 이전 마이그레이션으로 쉽게 다시 마이그레이션할 수 있으며 마이그레이션이 무엇인지 수동으로 확인하지 않고도 리포지토리의 특정 분기와 매우 쉽게 동기화할 수 있습니다.
이전 예에서
showmigrations
를 수행하고 migrate
에 마이그레이션을 수동으로 입력하는 대신 migrateprevious
를 사용할 수 있습니다.python manage.py migrateprevious polls
Attempting to go back to rollback polls to previous migration
Operations to perform:
Target specific migration: 0002_question1, from polls
Running migrations:
Rendering model states...
DONE
Unapplying polls.0003_person...
OK
그리고 변경 사항을 테스트 서버에 배포하고 마이그레이션 롤백을 잊은 경우 다음 분기를 배포하기 전에 배포 시퀀스에서 간단히 사용할 수 있습니다
migraterollback
.python manage.py migraterollback polls main
Attempting to go back to rollback polls to latest migration on branch main
Operations to perform:
Target specific migration: 0002_question1, from polls
Running migrations:
Rendering model states...
DONE
Unapplying polls.0003_person...
OK
그러나 git 명령을 호출할 수 있으려면 .git 파일이 있어야 합니다.
결론
이 기사가 도움이 되었기를 바라며 제가 언급한 패키지를 확인하고 싶다면 오픈 소스이며 저장소를 찾을 수 있습니다here. 즐거운 코딩하세요!
Reference
이 문제에 관하여(새로 적용된 Django 마이그레이션을 어떻게 되돌리나요?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jdvert/how-do-you-revert-a-newly-applied-django-migration-2din텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)