새로 적용된 Django 마이그레이션을 어떻게 되돌리나요?

3314 단어 webdevpythondjangogit
따라서 새 마이그레이션을 생성하고 이를 데이터베이스에 적용했지만 몇 가지 테스트 후에 여전히 작업이 필요하고 되돌려야 한다는 것을 깨달았습니다. 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. 즐거운 코딩하세요!

좋은 웹페이지 즐겨찾기