2010-04-30 3 views
16

새로운 Django 설치에서 일부 모델을 사용하고 있습니다. 앱 데이터를 잃지 않고 필드를 변경할 수 있습니까?Django : 모든 데이터를 지우지 않고 모델을 변경 하시겠습니까?

필드를 변경하고 실행하려고 시도했습니다 python manage.py syncdb. 이 명령에서 출력이 없습니다.

변경된 모델을 편집하기 위해 관리 페이지로 Renavigation하면 TemplateSyntaxErrors가 발생하여 장고는 db에 존재하지 않는 필드를 표시하려고했습니다.

SQLite를 사용하고 있습니다.

db 파일을 삭제 한 다음 python manage.py syncdb을 다시 실행할 수는 있지만 다소 고통 스럽습니다. 그것을 할 수있는 더 좋은 방법이 있습니까?

답변

5

열 추가/제거에 대해서만 이야기하는 경우 데이터베이스 스키마/레이아웃을 수동으로 업데이트해야합니다.

열의 이름을 바꾸려면 다른 방법을 찾아야합니다.

당신은/사양 장고 추가, 그리고 수동 ALTER TABLE의 해당 명령을 실행하는 것입니다 어떤 종류의 어떤 열을보기 위해, 새로운 SQL이 어떻게 보일지 볼 수 python manage.py sql [app name] (http://docs.djangoproject.com/en/dev/ref/django-admin/#sql-appname-appname) 명령을 사용할 수 있습니다.

더 쉬운 모델/DB 관리를 가능하게하는 일부 앱/프로젝트가 있지만 장고는이 기능을 의도적으로/의도적으로 지원하지 않습니다.

+0

장고 책은 이것에 대한 좋은 섹션이 있습니다. [link] http://www.djangobook.com/en/2.0/chapter10.html#Making%20Changes%20to%20a%20Database%20Schema [/ link] –

20

Django는 기존 데이터베이스 열을 변경하지 않습니다. Syncdb는 테이블을 만들지 만 레일스에서와 같이 '마이그레이션'을 수행하지는 않습니다. 그런 것이 필요한 경우 Django South을 확인하십시오.

the docs for syndb를 참조하십시오

Syncdb는 아직 설치되지 않은 모델에 대한 테이블을 생성합니다 기존 테이블

syncdb

를 변경하지 않습니다. 설치 후 모델 클래스의 변경 사항과 일치하는 ALTER TABLE.을 절대로 _ 행하지 않습니다. 모델 클래스와 데이터베이스 스키마를 변경하면 어떤 형태의 모호함이 생길 수 있으며, 이러한 경우 Django는 올바른 변경 사항을 추측해야합니다. 중요한 데이터가 프로세스에서 손실 될 위험이 있습니다.

모델을 변경하고 일치하도록 데이터베이스 테이블을 변경하려면 sql 명령을 사용하여 새 SQL 구조를 표시하고이를 기존 테이블 스키마와 비교하여 변경 사항을 해결하십시오.

sqlite가 제공하는 관리 도구를 통해 DB의 열 이름을 수동으로 변경해야합니다. 예를 들어, MySQL을 사용하여이 작업을 수행 했으므로 MySQL에서 데이터에 영향을주지 않고 열 이름을 변경할 수 있으므로 아무 문제가 없습니다.

8

물론 있습니다.
체크 아웃 South

+0

이것은 오래된 버전입니다. – User

관련 문제