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

时间:2010-12-26 03:52:54

标签: python django django-queryset

我有两个问题:

  1. 如何删除Django中的表?
  2. 如何删除表格中的所有数据?
  3. 这是我的代码,但没有成功:

    Reporter.objects.delete()
    

8 个答案:

答案 0 :(得分:104)

经理内部:

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)

答案 1 :(得分:65)

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

Reporter.objects.all().delete()

答案 2 :(得分:9)

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

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

答案 3 :(得分:9)

使用外壳

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 :(得分:3)

Django 1.11删除数据库表中的所有对象 -

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

请参阅以下引用的官方Django文档 - 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" 

请考虑一下 - 如果我们不去管理控制台并尝试查看模型的对象 - 已经删除 - Django应用程序就像预期的那样工作。

django admin screencapture

答案 5 :(得分:2)

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

def delete_all(self):
  Reporter.objects.all().delete()
  return HttpResponseRedirect('/')

答案 6 :(得分:0)

有几种方法:

直接删除它:

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

要从实例中删除它:

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

//不要使用相同的名称

答案 7 :(得分: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