2015-01-28 3 views
0

질문의 이름이 오해의 소지가 있지만 여기 거래가되어서 죄송합니다.이전 데이터베이스로 새로운 django 코드를 실행하는 방법은 무엇입니까?

이전 버전의 django app (django < 1.7)에 사용 된 데이터베이스를 덤프했습니다.

나는 django 1.7을 사용하는 새로운 버전의 코드를 가지고있다. 그리고 지금 모든 데이터를 저장하면서 새로운 코드로 일부 서버를 업그레이드해야합니다.

나는 그것이 작동 것이라고 생각하는 방법 :

하여, 데이터베이스를 복원 ./manage.py 마이그레이션 새로운 마이그레이션 (1.7 마이그레이션)을 실행합니다.

완료!

그러나 마이그레이션을 실행할 때 "관계가 이미 존재합니다"오류가 있습니다.

데이터베이스가 이전 기록이나 다른 것과 동기화되지 않았기 때문에 이런 일이 발생했을 가능성이 있습니다. 그러나 어떻게해야할지 모르겠습니다.

EDIT1 이제 데이터베이스를 새로운 마이그레이션으로 동기화 할 수있는 방법이 있으므로 마이그레이션 스크립트 또는 수동으로 만드는 유일한 방법이 있다는 것을 알고 있습니다.

테이블에 TABLE이라는 이름의 테이블이 있고 C1과 C2의 두 개의 열이 있다고 가정합니다.

이제 1.6에서 1.7로 마이그레이션 할 때 C3 열을 추가했습니다. 따라서 초기 마이그레이션은 "COLUMNS C1, C2, C3로 테이블 생성 테이블"과 유사합니다.

이전 데이터베이스로 마이그레이션하려고 할 때이를 수행하지 않아도됩니다.

답변

0
  1. 새 열을 삭제하십시오.
  2. 초기 마이그레이션을 만듭니다. 모든 애플 리케이션을위한
  3. 가짜 초기 마이그레이션 :

    python manage.py migrate --fake yourappnamehere 0001 
    
  4. 는 열을 추가 새로운 마이그레이션을 작성합니다.
  5. 새 마이그레이션을 실행합니다.
+0

음 ... 어떤 열이 새로운지 알 수 없습니다. 따라서 수동 검사가 필요합니다. 별로 옵션이 아닙니다. 2. 이미 마이그레이션이 있습니다. 왜 다른 것을 만들어야합니까? 다른 마이그레이션을 깨뜨리지 않을까요? – user1685095

+0

1. 기존 데이터베이스에서 django 모델을 만들 수 있습니다 :'python manage.py inspectdb> models.py' 그리고 새로운 컬럼을 확인하십시오. DB가 정말 큰 경우 모델을 비교하고 기반에서 생성 된 간단한 파서를 작성할 수 있습니다. 2. 현재 마이그레이션이 데이터베이스와 일치하지 않으므로 삭제해야합니다. – zymud

+0

아니요, 삭제할 필요는 없습니다. 데이터베이스는 새로운 마이그레이션과 일관성이있는 상태로 변경해야합니다. 그렇지 않은 경우 =) – user1685095

관련 문제