Django South를 통한 이전 마이그레이션


217

좋아, 이것은 정말로 어리석은 일처럼 보이고, 어딘가에 뭔가 빠져 있다고 확신합니다.

Django에서 South를 사용하여 역방향 마이그레이션을 어떻게 수행합니까?

따라서 모델을 조정하고을 사용하여 마이그레이션을 생성하고을 사용하여 마이그레이션을 schemamigration실행했습니다. migrate이제는 이것이 내가 원하는 것이 아니며 이전 방식으로 돌아 가기를 원합니다.

수동으로 db 테이블을 편집하고 마이그레이션 파일을 제거하는 데 부족한 경우 마이그레이션을 롤백하는 방법은 무엇입니까? Google을 통해 South를 사용하여 이전 마이그레이션에 대한 참조를 찾았지만 아직 확실한 코드 예제를 찾지 못했습니다.

누구든지 도울 수 있습니까?


좋은 질문!!
Marshall X

답변:


335

롤백하려는 마이그레이션 직전 의 마이그레이션 수를 파악해야합니다 .

앱에는 파일 이름이 다음과 같은 마이그레이션 디렉토리가 있어야합니다.

0000_initial.py
0001_added_some_fields.py
0002_added_some_more_fields.py
0003_deleted_some_stuff.py

일반적으로을 실행 ./manage.py migrate your_app하면 South는 모든 새 마이그레이션을 순서대로 실행합니다. (새로운 테이블을 결정하기 위해 데이터베이스 테이블을 확인합니다).

그러나 번호로 마이그레이션을 지정할 수도 있으며 South는 데이터베이스 를 앞으로 또는 뒤로 마이그레이션하여 해당 시점으로 이동합니다. 따라서 위의 예제 파일을 사용하여 이미 최대 0003으로 마이그레이션했으며 0003을 반대로 실행하려는 경우 (실행 취소, 효과적으로 실행)

./manage.py migrate your_app 0002

South는 데이터베이스를보고 이미 0003을 실행했음을 인식하고 0002로 돌아가려면 0003에 대한 역방향 마이그레이션을 실행해야한다고 결정합니다.


1
불행히도, 다음 마이그레이션을 만들 때 사이에있는 마이그레이션은 건너 뛰지 않으므로 나중에 다시 마이그레이션하면됩니다. 더 좋은 방법이있을 것 같습니다.
mlissner

44
@mlissner 정말로 원한다면, 데이터베이스를 롤백 한 후, 주어진 앱 (위의 예제 your_app / migrations)의 migrations 폴더로 이동하여 원하지 않는 마이그레이션을 삭제하십시오
Josh Russo

1
정확히 – South는 절대로 마이그레이션을 건너 뛰지 않습니다. 0001-nnnn의 파일은 nnnn 값에 대해 일관된 마이그레이션 세트를 나타냅니다. 그렇지 않은 경우 문제가있는 것을 직접 주문하거나 삭제해야합니다.
Ian Clelland

217

누군가 (나 같은 사람) 가 초기 (0001)에서 다시 마이그레이션 하는 방법을 궁금해 한 경우 :

django-admin.py migrate some_app zero

산출:

Running migrations for some_app:
 - Migrating backwards to zero state.
 < some_app:0001_initial

"zero"는 마이그레이션 이전의 특수 상태입니다.

참조 : http://south.aeracode.org/docs/commands.html


6
누군가가 0001 --fake migrate를 실행했으며 이것이 0001을 뒤로 실행하는 유일한 방법이었습니다. 감사!
jmanning2k

1
매우 중요한 답변, 왜 migrate 0000작동하지 않는지 궁금 했습니다. 예를 들어, (아마도 잘못된) 초기 마이그레이션을 취소해야하는 경우, 마이그레이션 마이그레이션은이 마이그레이션이 발생하지 않았다고 생각합니다.
Tomasz Gandor

3

매개 변수 끝에 마이그레이션 이름을 추가하십시오.

./manage.py migrate app-name 00xx-migration-name

2
괜찮아요. 전에 했어요.하지만 타이핑 / 붙여 넣기는 많이 해요. 이 경우 베어 "상태"번호 00xx로 충분합니다. 마이그레이션을 개선하고 테스트 할 때 히스토리에 이전 상태 번호와 함께 순방향 (인수 없음)과 두 명령을 모두 사용할 수 있습니다.
Tomasz Gandor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.