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

我有两个问题:

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

这是我的代码,但不成功:

Reporter.objects.delete()
212832 次浏览

管理者内部:

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)

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

Reporter.objects.all().delete()

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

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

有几种方法:

直接删除:

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

从实例中删除:

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

//不使用相同的名字

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,但现在我看到一个错误屏幕在管理控制台当我试图确定模型 _ 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 管理截图

使用 shell,

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

可以使用 Django-Truncate 库在不破坏表结构的情况下删除表的所有数据。

例如:

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

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

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

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

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

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