Django를 사용하여 테이블의 모든 데이터를 제거하는 방법


답변:


139

관리자 내부 :

def delete_everything(self):
    Reporter.objects.all().delete()

def drop_table(self):
    cursor = connection.cursor()
    table_name = self.model._meta.db_table
    sql = "DROP TABLE %s;" % (table_name, )
    cursor.execute(sql)

3
또한 delete_everything () 메서드 인 경우 다음 버그에주의하십시오. code.djangoproject.com/ticket/16426
David Planella

1
이것은 첫 번째 질문에 대한 답변이지만 두 번째 질문은 처리하지 않습니다. 나는 'DELETE FROM %s' % (table_name, )그 비트를 사용 하여 테이블을 비워 두지 만 그대로 둡니다.
user3934630

93

최신 문서 에 따라 올바른 호출 방법은 다음과 같습니다.

Reporter.objects.all().delete()

3
예, 그러나 테이블에 많은 레코드가 있으면 이것은 죽습니다. 그래서 다음과 같이해야했습니다 : for x in MyTable.objects.all (). iterator () : x.delete ()
max

2
@max 그러나 이것을 사용하면 인스턴스의 delete메서드가 호출되지만 delete호출 은 호출 QuerySet되지 않습니다.
alxs

20

모든 테이블에서 모든 데이터를 제거하려면 명령을 시도 할 수 있습니다 python manage.py flush. 이렇게하면 테이블의 모든 데이터가 삭제되지만 테이블 자체는 여전히 존재합니다.

여기에서 더보기 : https://docs.djangoproject.com/en/1.8/ref/django-admin/


19
그것은 또한 당신의 수퍼 유저를 제거하는 것을 언급에 당신을 위해 도움이되었을 것입니다
Aurielle Perlmann에게

15
그는 "모든 테이블의 모든 데이터"라고 말했는데 이는 매우 파괴적인 작업임을 나타냅니다.
요르단

6

쉘을 사용하여,

1) 테이블 삭제 :

python manage.py dbshell
>> DROP TABLE {app_name}_{model_name}

2) 테이블에서 모든 데이터를 제거하려면 :

python manage.py shell
>> from {app_name}.models import {model_name}
>> {model_name}.objects.all().delete()

4

Django 1.11 데이터베이스 테이블에서 모든 개체 삭제-

Entry.objects.all().delete()  ## Entry being Model Name. 

- 아래 인용 여기 공식 장고 문서를 참조하십시오 https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects

delete ()는 Manager 자체에 노출되지 않는 유일한 QuerySet 메서드입니다. 이것은 실수로 Entry.objects.delete ()를 요청하고 모든 항목을 삭제하는 것을 방지하는 안전 메커니즘입니다. 모든 개체를 삭제하려면 전체 쿼리 집합을 명시 적으로 요청해야합니다.

나는 내 아래에 보이는 코드 스 니펫을 시도했다. somefilename.py

    # for deleting model objects
    from django.db import connection
    def del_model_4(self):
        with connection.schema_editor() as schema_editor:
            schema_editor.delete_model(model_4)

내 안에는 views.py단순히 html 페이지를 렌더링하는 뷰가 있습니다 ...

  def data_del_4(request):
      obj = calc_2() ## 
      obj.del_model_4()
      return render(request, 'dc_dash/data_del_4.html') ## 

-model == model_4에서 모든 항목을 삭제했지만 이제는 model_4의 모든 개체가 삭제되었음을 알리려고 할 때 관리 콘솔 내에 오류 화면이 표시됩니다.

ProgrammingError at /admin/dc_dash/model_4/
relation "dc_dash_model_4" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "dc_dash_model_4" 

ADMIN 콘솔로 이동하지 않고 이미 삭제 된 모델의 개체를 확인하려고 시도하면 Django 앱이 의도 한대로 작동합니다.

장고 관리자 화면 캡처


1

몇 가지 방법이 있습니다.

직접 삭제하려면 :

SomeModel.objects.filter(id=id).delete()

인스턴스에서 삭제하려면 :

instance1 = SomeModel.objects.get(id=id)
instance1.delete()

// 같은 이름을 사용하지 마십시오.

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