Django를 사용하여 MySQL로 웹 사이트를 구축하고 있습니다. 이제 배우면서 모델을 자주 변경해야하므로 모든 테이블이 지워지고 새 테이블이 생성되기를 원합니다.
그러나 syncdb
기존 테이블을 건드리지 않습니다. 이 문제를 처리하는 더 좋은 방법이 있습니까?
답변:
데이터에 관심이없는 경우 :
가장 좋은 방법은 데이터베이스를 삭제하고 syncdb
다시 실행하는 것입니다. 또는 다음을 실행할 수 있습니다.
Django> = 1.5의 경우
python manage.py flush
Django <1.5의 경우
python manage.py reset appname
( --no-input
명령 끝에 추가 하여 대화 형 프롬프트를 건너 뛸 수 있습니다.)
데이터에 관심이있는 경우 :
문서에서 :
syncdb는 아직 설치되지 않은 모델에 대해서만 테이블을 생성합니다. 설치 후 모델 클래스에 대한 변경 사항을 일치시키기 위해 ALTER TABLE 문을 실행하지 않습니다. 모델 클래스와 데이터베이스 스키마에 대한 변경에는 종종 어떤 형태의 모호성이 포함되며, 이러한 경우 Django는 올바른 변경을 추측해야합니다. 프로세스에서 중요한 데이터가 손실 될 위험이 있습니다.
모델을 변경하고 일치하도록 데이터베이스 테이블을 변경하려면 sql 명령을 사용하여 새 SQL 구조를 표시하고 기존 테이블 스키마와 비교하여 변경 사항을 해결하십시오.
https://docs.djangoproject.com/en/dev/ref/django-admin/
참조 : FAQ- https ://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database
사람들은 South ( http://south.aeracode.org/docs/about.html#key-features ) 도 추천 하지만 시도해 보지 않았습니다.
flush
. 사용하려고 python manage.py flush
또는 python manage.py flush --noinput
대화 형 프롬프트를 생략 할 수 있습니다.
Django Extensions를 사용하여 다음을 실행합니다.
./manage.py reset_db
데이터베이스 테이블을 지우고 다음을 실행합니다.
./manage.py syncdb
그것들을 다시 만들 것입니다 (사우스는 당신에게 사물을 마이그레이션하도록 요청할 수 있습니다).
가장 빠름 (데이터를 포함한 모든 테이블 삭제 및 생성) :
./manage.py reset appname | ./manage.py dbshell
주의:
reset
이미 SQL을 실행하므로 dbshell
. sqlreset
명령 을 사용하면 실행을 위해 셸로 파이프 할 수있는 SQL이 출력되지만 이는 불필요한 단계입니다.
Django-Truncate 라이브러리를 사용하여 테이블 구조를 파괴하지 않고 테이블의 모든 데이터를 삭제할 수 있습니다.
예:
pip install django-truncate
settings.py
파일 의 INSTALLED_APPS에 "django_truncate"를 추가 합니다.INSTALLED_APPS = [
...
'django_truncate',
]
python manage.py truncate --apps app_name --models table_name