Django : Django 앱을 완전히 제거하는 방법은 무엇입니까?


109

Django 앱을 완전히 제거하고 데이터베이스 제거를 완료하는 절차는 무엇입니까?


settings.py 설치된 앱에서 해당 앱 이름을 제거한 다음 기본 urls.py 파일에서 해당 앱에 대한 링크를 제거하십시오. 그런 다음 해당 앱을 안전하게 삭제할 수 있습니다
Aseem

데이터베이스를 재설정 SQLite는 당신이 괜찮다 사용하여 개발에 있다면, 그냥 응용 프로그램 폴더를 제거하고 괜찮습니다 db.sqlite3, 그리고에서 제거 INSTALLED_APPSsettings.py?
Kevin

답변:


150
  1. Django <1.7에는 앱의 모든 테이블을 삭제하는 데 필요한 SQL을 제공하는 편리한 관리 명령이 있습니다. 자세한 정보는 sqlclear 문서 를 참조하십시오. 기본적으로 실행 ./manage.py sqlclear my_app_name하면 DB에서 앱의 모든 흔적을 제거하기 위해 실행해야하는 SQL 문을 얻을 수 있습니다. 이러한 명령문을 SQL 클라이언트에 복사하여 붙여 넣어야합니다 (또는 파이프). Django 1.7 이상 에서는 데이터베이스 정리를 자동으로 실행하는 ( migration 문서 ./manage.py migrate my_app_name zero참조 )를 사용 하십시오 .

  2. 프로젝트에서 앱을 제거하려면 INSTALLED_APPS프로젝트의 settings.py. Django는 더 이상 앱을로드하지 않습니다.

  3. 앱의 파일이 더 이상 사용되지 않도록하려면 프로젝트 디렉터리 또는 PYTHONPATH의 다른 위치에서 앱 디렉터리를 삭제하십시오.

  4. (선택 사항) 앱이 미디어 파일, 캐시 파일 또는 기타 임시 파일을 어딘가에 저장 한 경우 해당 파일도 삭제할 수 있습니다. 또한 앱에서 남을 수있는 느린 세션 데이터에주의하십시오.

  5. (선택 사항) 오래된 콘텐츠 유형도 제거합니다.

그렇게.

from django.contrib.contenttypes.models import ContentType
for c in ContentType.objects.all():
    if not c.model_class():
        print "deleting %s"%c # print(f"deleting {c}") # for Python 3.6+
        c.delete()

5
훌륭한 대답입니다. 제가 추가 한 것은 pip uninstall package-name이며 PYTHONPATH를 트롤링하는 것보다 훨씬 좋습니다.
DaveJ

25
Django 1.7에서 마이그레이션을 사용하는 경우 1 단계는 ./manage.py migrate my_app_name zero. 그리고 SQL도 자동으로 실행됩니다.
나단 마

12
sqlclearDjango 1.9에서 제거 되었으므로이 답변은 이전 버전에만 적합합니다. 참조 : docs.djangoproject.com/en/1.10/releases/1.9/…
Akhorus

7
삭제중인 앱에 다른 앱의 마이그레이션이 의존하는 마이그레이션이있는 경우 이러한 종속 마이그레이션이 더 이상 존재하지 않음을 확인하면 마이그레이션 시스템이 중단됩니다. 삭제할 앱이 다른 앱의 마이그레이션 기록에 종속 된 경우 위의 답변을 사용할 때주의하십시오.
Filip Kilibarda

1
그리고 완전성을 위해, 당신은 일반적으로에 대한 참조를 제거해야합니다 include("appname.urls")프로젝트에서urls.py
nigel222

16
  1. 에 주석 settings.pyINSTALLED_APPS 불필요한 응용 프로그램의 라인
  2. 모든 폴더를 삭제 __pycache__하고migrate 프로젝트
  3. 불필요한 모델 삭제 models.py
  4. 의 모든 가져 오기 링크 삭제 views.py,admin.py end 등의 .
  5. 모든 링크 삭제 urls.py불필요한 앱의
  6. 데이터베이스에서 앱과 관련된 불필요한 테이블을 삭제합니다 (도움말 프로그램 "Valentina Studio"를 사용하여 수행합니다).
  7. 앱 폴더 삭제
  8. 명령 줄에서 그것을 수행 python manage.py migrate하고python manage.py syncdb

3

django 앱은 * .py 파일의 "세트"이며 django-app-name이있는 디렉토리입니다. 따라서 모든 * .py 파일이있는 전체 폴더를 간단히 삭제할 수 있습니다.

DB에서 테이블을 "제거"하려면 다음을 사용해야합니다. DELETE FROM <app-name_table-names>

또한 루트 디렉터리의 setting.py에서 app-name과 같은 줄을 삭제해야합니다.


다른 앱과 데이터베이스를 공유하지 않는다고 가정하면 settings.py에 이름이 지정된 db를 삭제할 수 있습니다.
joel3000 2010-07-25

각 앱에는 자체 db가 있습니다. – 나쁘지 않습니다
V-Light

3
@ V-Light 각 앱에는 자체 테이블이 있고 각 프로젝트에는 자체 데이터베이스가 있습니다.
Alireza Savand

2

이 기사의 단계를 정말 좋아합니다 . 여기에는 마이그레이션 지원 이 포함됩니다 .

두 번의 코드 업데이트로 조정해야 할 수도 있습니다.하지만 많은 배포 (예 : 테스트 단계, 베타 버전 및 프로덕션-제 경우)로 작업해야 할 때 정말 안전 해 보입니다.


2

제 맥락에서 프로젝트는 여러 번 존재합니다. 저는 개발 시스템이 있고, 일부 팀원에게는 개발 시스템이 있으며, 고객을위한 스테이징 시스템과 프로덕션 시스템이 있습니다. 이것은 손으로 SQL 명령을 실행하고 싶지 않다는 것을 의미합니다. 자동화되기를 바랍니다.

목표 : 앱과 모든 데이터베이스 테이블을 제거합니다.

1 단계 : 앱을 비우고 설치된 상태로 둡니다.

"migrations"폴더를 제외한 모든 파일을 앱에서 제거합니다.

다음 명령을 실행하십시오. manage.py makemigrations -n drop_all_tables my_app_to_remove

이제 디렉토리는 다음과 같습니다.

my_app_to_remove/
my_app_to_remove/__init__.py
my_app_to_remove/migrations
my_app_to_remove/migrations/0001_initial.py
my_app_to_remove/migrations/....
my_app_to_remove/migrations/0030_drop_all_tables.py
my_app_to_remove/migrations/__init__.py

my_app_to_remove"settings.py"파일을 그대로 둡니다 .

2 단계 : 변경 사항 배포

모든 프로젝트를 업데이트하십시오. 팀 동료에게 프로젝트를 업데이트하고 마이그레이션을 실행하도록 지시하십시오.

3 단계 : settings.py에서 "my_app_to_remove"제거

이제 settings.py에서 "my_app_to_remove"를 제거하고 다시 배포하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.