기존 모델의 변경 사항을 반영하도록 django 데이터베이스 업데이트
나는 이미 모델을 정의하고 manager.py syncdb. 모델에 일부 필드를 추가 했으므로 syncdb다시 시도 했지만 출력이 나타나지 않습니다. 내 템플릿에서 이러한 새 필드에 액세스하려고하면 "No Such Column"예외가 발생하여 syncdb가 실제로 데이터베이스를 업데이트하지 않았다고 생각합니다. 여기서 올바른 명령은 무엇입니까?
필요한 것은 마이그레이션 시스템 인 것 같습니다. South 는 정말 훌륭하고 훌륭하게 작동하며 워크 플로우를 용이하게하는 몇 가지 자동화 도구가 있습니다. 그리고 훌륭한 튜토리얼이 있습니다.
참고 : syncdb는 기존 테이블을 업데이트 할 수 없습니다. 자동으로 무엇을할지 결정하는 것이 불가능한 경우가 있습니다. 그래서 남쪽 스크립트가 이처럼 훌륭합니다.
Django 1.7+부터 기본 제공 마이그레이션 지원 은 데이터를 보존하는 데이터베이스 스키마 마이그레이션을 허용합니다. 아래 솔루션보다 더 나은 접근 방식 일 것입니다.
추가 앱이 필요하지 않은 또 다른 옵션은 내장 된 manage.py기능을 사용하여 데이터를 내보내고 데이터베이스를 지우고 내 보낸 데이터를 복원하는 것입니다.
아래 메소드는 앱의 데이터베이스 테이블을 업데이트하지만 해당 테이블에 존재 하는 모든 데이터를 완전히 파괴 합니다. 앱 모델을 변경해도 이전 스키마가 손상되지 않는 경우 (예 : 새로운 선택적 필드를 추가 한 경우) 다음과 같이 데이터를 이전에 덤프하고 나중에 다시로드 할 수 있습니다.
Django 1.4.15 이하
python manage.py dumpdata <your_app> > temp_data.json
python manage.py reset <your_app>
python manage.py loaddata temp_data.json
Django 1.5 이상
python manage.py dumpdata <your_app> > temp_data.json
python manage.py sqlclear <your_app> | python manage.py dbshell
python manage.py syncdb
python manage.py loaddata temp_data.json
(이 reset명령은 더 이상 사용되지 않고 Django 1.5 에서 제거되었습니다. )
변경 사항으로 인해 이전 스키마가 깨지면 작동하지 않습니다.이 경우 South 또는 Django Evolution 과 같은 도구 가 좋습니다.
Django 1.7부터는 이제 네이티브 마이그레이션으로이를 수행 할 수 있습니다. 그냥 달려
python manage.py makemigrations <your app name>
python manage.py migrate
Django의 syncdb는 데이터베이스의 기존 테이블을 변경하지 않으므로 수동으로 수행해야합니다. 내가 항상하는 방식은 :
- 먼저 모델 클래스를 변경하십시오.
- 그런 다음 manage.py sql myapp을 실행하십시오.
- 그것이 출력하는 SQL을보고 그것이 당신이 만들려고하는 변화를 어떻게 표현했는지보십시오.
- 데이터베이스 관리자를 사용하여 수동으로 변경하십시오.
- 관리 사이트를 사용하여 모든 것이 올바르게 작동하는지 확인하십시오.
sqllite를 사용하는 경우 좋은 관리자는 firefox 플러그인입니다. link
또 다른 도구는 장고 진화입니다. 대부분의 경우 테이블 삭제가 필요하지 않습니다.
다른 django 앱으로 설치하고 실행하십시오.
python manage.py evolve --hint --execute
deseb 는이를위한 훌륭한 도구입니다.
설치되면 ./manage.py sqlevolve를 작성할 수 있으며 데이터베이스 구조를 모델과 동기화 상태로 유지하는 데 필요한 SQL 명령을 생성합니다.
을 사용하여 테이블을 다시 만들려면 먼저 테이블을 삭제해야합니다 syncdb.
기존 데이터를 보존하려면 데이터베이스를 언로드하고 테이블을 삭제하고 실행 syncdb하여 새 데이터베이스를 만든 다음 이전 데이터를 새 테이블로 다시로드해야합니다.
이를 도와주는 도구가 있습니다. 그러나 대부분의 경우 수동으로 수행하는 것만 큼 쉽습니다.
버전 1.4.1 이상 사용자의 경우 명령이 다음과 같이 변경되었습니다.
python manage.py flush
모든 데이터를 삭제하므로 사용하기 전에 공식 문서 를 읽으십시오 .
'program story' 카테고리의 다른 글
| jQuery는 모든 텍스트 필드의 값 합계를 계산합니다. (0) | 2020.11.06 |
|---|---|
| 경로의 XML 잘못된 문자 (0) | 2020.11.06 |
| 파일 압축 해제 (0) | 2020.11.05 |
| Windows의 Git : crlf 설정은 무엇을 의미합니까? (0) | 2020.11.05 |
| 크로스 브라우저 확장 API? (0) | 2020.11.05 |