如何使用 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 删除表中的所有数据的主要内容,如果未能解决你的问题,请参考以下文章