2011-04-21 2 views
5

이 테이블의 데이터를 손실하지 않고 내 데이터베이스 스키마를 업그레이드 (변경) (테이블에 장장을 추가하여 테이블에 새 필드 추가)하면 가장 좋은 해결책은 무엇입니까? "syncdb"는 물론 추가하지 않으므로 테이블을 삭제하지 않고 syncdb를 사용하여 다시 작성하는 방법에 대한 조언이 필요합니다.django : 데이터 손실없이 데이터베이스 스키마 업데이트

감사합니다, Ignas

답변

9

south가 옵션이 아닌 경우에는 작은 변경 사항을 위해 스크립트를 수동으로 작성합니다. 큰 사람은 내가

./manage.py dumpdata appname 

http://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-appname-appname-appname-model

투척을 사용하여 파일에 그. regex replace를 실행하여 추가/제거 된 필드를 업데이트 한 다음 해당 응용 프로그램을 재설정 할 수 있습니다. 나는 이것을 잠시하지 않았 음을 인정해야하지만 필요하다면 이것을 위해 몇 가지 구체적인 코드를 얻을 수 있습니다.

가 다시 loaddata

편집

Django dump data for a single model?이 질문에 최대로드와 유사하며 내가 얘기 된 정보가있을 수 있습니다.

아직도 필요한 경우 알려 주시면 이전 스크립트 (또는 간단한 단순한 스크립트)를 작성해 드리겠습니다.

UPDATE

./manage.py dumpdata appname --indent=4 > appname.json 

#open your fav text editor and do a find/replace 

./manage.py reset appname 
./manage.py loaddata appname.json 

을해야한다고. 찾기 바꾸기를 수행 할 때 더 이상 가지고 있지 않은 필드를 제거하고 Null을 허용하지 않는 필드를 추가하기 만하면됩니다. (최소한).

참고 : --indent = 4는 모든 것을 형식화합니다. 그것은 4 칸을 의미합니다. ./manage.py 리셋은 django 1.3의 pre django 1.3 (gah!)에서만 작동하며 ./manage dbshelldrop table을 사용해야합니다. 해당 SQL은 ./manage.py sqlreset appname 명령에서 찾을 수 있습니다.

+0

익숙해지기 위해 시도해보아야하지만 합리적으로 들립니다. 물론 언급하고 공유 할 수있는 스크립트가 있다면, 내 자신을 작성하기 전에 그것을 보는 것이 좋을 것입니다 :) 그러나 확실히 그것을 가지고 놀려고 할 것입니다, 감사합니다! –

+0

나는 당신이 리눅스를 운영하고 있다고 가정하고 있나? –

+0

Linux 및 Mac OS X. –