Django에서 manage.py를 사용하여 CLI에서 데이터베이스를 지우는 가장 쉬운 방법은 무엇입니까?


83

Django를 사용하여 MySQL로 웹 사이트를 구축하고 있습니다. 이제 배우면서 모델을 자주 변경해야하므로 모든 테이블이 지워지고 새 테이블이 생성되기를 원합니다.

그러나 syncdb기존 테이블을 건드리지 않습니다. 이 문제를 처리하는 더 좋은 방법이 있습니까?

답변:


152

데이터에 관심이없는 경우 :

가장 좋은 방법은 데이터베이스를 삭제하고 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 ) 도 추천 하지만 시도해 보지 않았습니다.


4
South는 마이그레이션을 자동으로 처리하는 데 정말 좋습니다. 익숙해지는 데 약간의 시간이 걸리지 만 개발 중에 데이터베이스를 삭제하고 다시 생성하는 번거 로움을 많이 줄여 주며 사이트가 활성화되고 귀중한 데이터가있는 동안 db 구조를 변경해야하는 경우 필수 항목입니다.
thepeer 2013-06-08

11
RESET COMMAND DEPRECIATED . Django 1.5에서는 명령이 flush. 사용하려고 python manage.py flush또는 python manage.py flush --noinput대화 형 프롬프트를 생략 할 수 있습니다.
agconti 2013-07-20

South는 더 이상 사용되지 않습니다 . 여기를 참조 하십시오 . 그리고 여기에 제공 한 링크가 끊어졌습니다.
Mukesh Sai Kumar

명령이 이제 문서django-admin flush 에 따른 것 같습니다
Todd

4

Django Extensions를 사용하여 다음을 실행합니다.

./manage.py reset_db

데이터베이스 테이블을 지우고 다음을 실행합니다.

./manage.py syncdb

그것들을 다시 만들 것입니다 (사우스는 당신에게 사물을 마이그레이션하도록 요청할 수 있습니다).


2
PIP 장고-확장 설치 : @becko이 첫 번째 실행
마른 세수

4

Django 문서 는 의도가 빈 DB에서 다시 시작하려는 경우 (OP의 의도 인 것 같음) 데이터베이스를 삭제하고 다시 만들고 migrate(사용하는 대신) 다시 실행 한다고 명시 적으로 언급 한다고 생각 합니다 flush.

빈 데이터베이스에서 시작하여 모든 마이그레이션을 다시 실행하려면 데이터베이스를 삭제하고 다시 만든 다음 대신 마이그레이션을 실행해야합니다.

따라서 OP의 경우 다음을 수행하면됩니다.

  1. MySQL에서 데이터베이스 삭제
  2. 데이터베이스 재생성
  3. 운영 python manage.py migrate

0

가장 빠름 (데이터를 포함한 모든 테이블 삭제 및 생성) :

./manage.py reset appname | ./manage.py dbshell

주의:

  • Windows에서 올바르게 작동하지 않을 수 있습니다.
  • DB에 오래된 테이블을 보관할 수 있습니다.

3
reset이미 SQL을 실행하므로 dbshell. sqlreset명령 을 사용하면 실행을 위해 셸로 파이프 할 수있는 SQL이 출력되지만 이는 불필요한 단계입니다.
Michael Mior 2013 년

0

Django-Truncate 라이브러리를 사용하여 테이블 구조를 파괴하지 않고 테이블의 모든 데이터를 삭제할 수 있습니다.

예:

  1. 먼저 터미널 / 명령 줄을 사용하여 django-turncate를 설치합니다.
pip install django-truncate
  1. settings.py파일 의 INSTALLED_APPS에 "django_truncate"를 추가 합니다.
INSTALLED_APPS = [
    ...
    'django_truncate',
]
  1. 터미널에서이 명령을 사용하여 앱에서 테이블의 모든 데이터를 삭제합니다.
python manage.py truncate --apps app_name --models table_name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.