如何使用django删除表中的所有数据

zjm*_*126 99 python django django-queryset

我有两个问题:

  1. 如何删除django中的表
  2. 如何删除表中的所有数据

这是我的代码,但没有成功:

Reporter.objects.delete()
Run Code Online (Sandbox Code Playgroud)

Tia*_*ago 118

经理内部:

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)
Run Code Online (Sandbox Code Playgroud)

  • 另外,如果你是delete_everything()方法,请注意这个错误:https://code.djangoproject.com/ticket/16426 (3认同)

小智 77

根据最新文档,正确的调用方法是:

Reporter.objects.all().delete()
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是如果表中有很多记录,这会被杀死.所以我必须这样做:for My in MyTable.objects.all().iterator():x.delete() (3认同)
  • @max但是,请注意,使用此方法时,将调用实例的`delete`方法,而对QuerySet`进行`delete`调用则不会。 (2认同)

小智 23

使用外壳,

1)对于删除表:

python manage.py dbshell
>> DROP TABLE {app_name}_{model_name}
Run Code Online (Sandbox Code Playgroud)

2)从表中删除所有数据:

python manage.py shell
>> from {app_name}.models import {model_name}
>> {model_name}.objects.all().delete()
Run Code Online (Sandbox Code Playgroud)


小智 13

如果要删除所有表中的所有数据,可能需要尝试该命令python manage.py flush.这将删除表中的所有数据,但表本身仍然存在.

在此处查看更多信息:https://docs.djangoproject.com/en/1.8/ref/django-admin/

  • 本来有帮助你提一下,它也会删除你的超级用户,如果我可以将它下载40次 (16认同)
  • 他确实说过"所有表中的所有数据",这表明这是一个非常具有破坏性的操作. (9认同)
  • 用户表与“您的”表位于同一数据库中。在使用这样的操作之前,您现在应该这样做。 (2认同)

Roh*_*kar 6

Django 1.11 delete all objects from a database table -

Entry.objects.all().delete()  ## Entry being Model Name. 
Run Code Online (Sandbox Code Playgroud)

Refer the Official Django documentation here as quoted below - https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects

Note that delete() is the only QuerySet method that is not exposed on a Manager itself. This is a safety mechanism to prevent you from accidentally requesting Entry.objects.delete(), and deleting all the entries. If you do want to delete all the objects, then you have to explicitly request a complete query set:

I myself tried the code snippet seen below within my 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)
Run Code Online (Sandbox Code Playgroud)

and within my views.py i have a view that simply renders a html page ...

  def data_del_4(request):
      obj = calc_2() ## 
      obj.del_model_4()
      return render(request, 'dc_dash/data_del_4.html') ## 
Run Code Online (Sandbox Code Playgroud)

it ended deleting all entries from - model == model_4 , but now i get to see a Error screen within Admin console when i try to asceratin that all objects of model_4 have been deleted ...

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" 
Run Code Online (Sandbox Code Playgroud)

Do consider that - if we do not go to the ADMIN Console and try and see objects of the model - which have been already deleted - the Django app works just as intended.

django admin screencapture


小智 5

使用此语法删除行也可以重定向到主页(以避免页面加载错误):

def delete_all(self):
  Reporter.objects.all().delete()
  return HttpResponseRedirect('/')
Run Code Online (Sandbox Code Playgroud)