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

Posted

技术标签:

【中文标题】如何使用 Django 删除表中的所有数据【英文标题】:How to remove all of the data in a table using Django 【发布时间】:2011-05-30 18:44:41 【问题描述】:

我有两个问题:

    如何在 Django 中删除表? 如何删除表格中的所有数据?

这是我的代码,不成功:

Reporter.objects.delete()

【问题讨论】:

来自 CLI:***.com/questions/6485106/… python manage.py flush,这将清除数据库中的所有数据,但不会删除表 【参考方案1】:

在经理内部:

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)

【讨论】:

另外,如果你是 delete_everything() 方法,请注意这个错误:code.djangoproject.com/ticket/16426 虽然这回答了第一个问题,但它不处理第二个问题。我会使用'DELETE FROM %s' % (table_name, ) 来表示那个位,让表格空着但完好无损。【参考方案2】:

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

Reporter.objects.all().delete()

【讨论】:

是的,但是如果表中有很多记录,这会被杀死。所以我不得不这样做: for x in MyTable.objects.all().iterator(): x.delete() @max 但是请注意,这样会调用实例的delete 方法,而使用QuerySet 上的delete 调用则不会。【参考方案3】:

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

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

【讨论】:

如果您提及它还会删除您的超级用户,对您会有所帮助 他确实说过“所有表中的所有数据”,这应该表明这是一个非常具有破坏性的操作。 用户表与“你的”表在同一个数据库中。在使用这样的操作之前,您现在应该这样做。 作者询问如何删除表中的所有数据,而不是如何刷新所有表中的所有数据。【参考方案4】:

使用外壳,

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()

【讨论】:

option 1) 需要一个结束分号>> DROP TABLE app_name_model_name;,也有助于在检查表名之前使用>> .tables【参考方案5】:

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 中尝试了下面看到的代码 sn-p

    # 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 应用程序将按预期工作。

django admin screencapture

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

有几种方法:

直接删除:

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

从实例中删除它:

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

//不要使用相同的名字

【讨论】:

【参考方案8】:

您可以使用 Django-Truncate 库来删除表的所有数据,而不会破坏表结构。

例子:

    首先,使用终端/命令行安装 django-turncate:
pip install django-truncate
    settings.py 文件中将“django_truncate”添加到您的 INSTALLED_APPS:
INSTALLED_APPS = [
    ...
    'django_truncate',
]
    在终端中使用此命令从应用程序中删除表的所有数据。
python manage.py truncate --apps app_name --models table_name

【讨论】:

【参考方案9】:

实际上,我从 admin.py 中取消注册模型(我要删除的表数据)。然后我迁移。

python manage.py makemigrations
python manage.py migrate
python runserver

然后我在 admin.py 中注册模型并再次进行迁移。 :) 现在,桌子是空的。这可能不是一个专业的答案,但它帮助了我。

【讨论】:

以上是关于如何使用 Django 删除表中的所有数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 FMDB 从表中删除所有数据

Django sql清除所有应用程序

如何在 Django 中使用引导模式对表数据进行删除确认?

SQL CE中如何删除表中的所有数据?

如何一次删除所有 ms-access 表中的数据?

如何使用Android从sqlite中的表中删除所有记录?