【发布时间】:2011-05-30 18:44:41
【问题描述】:
我有两个问题:
- 如何在 Django 中删除表?
- 如何删除表格中的所有数据?
这是我的代码,不成功:
Reporter.objects.delete()
【问题讨论】:
-
python manage.py flush,这将清除数据库中的所有数据,但不会删除表
标签: python django django-queryset
我有两个问题:
这是我的代码,不成功:
Reporter.objects.delete()
【问题讨论】:
python manage.py flush,这将清除数据库中的所有数据,但不会删除表
标签: python django django-queryset
在经理内部:
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 FROM %s' % (table_name, ) 来表示那个位,让表格空着但完好无损。
根据最新的documentation,正确的调用方法是:
Reporter.objects.all().delete()
【讨论】:
delete 方法,而使用QuerySet 上的delete 调用则不会。
如果您想从所有表中删除所有数据,您可能需要尝试命令python manage.py flush。这将删除表中的所有数据,但表本身仍然存在。
在此处查看更多信息:https://docs.djangoproject.com/en/1.8/ref/django-admin/
【讨论】:
使用外壳,
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()
【讨论】:
>> DROP TABLE {app_name}_{model_name};,也有助于在检查表名之前使用>> .tables。
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 应用程序将按预期工作。
【讨论】:
使用此语法删除行也重定向到主页(以避免页面加载错误):
def delete_all(self):
Reporter.objects.all().delete()
return HttpResponseRedirect('/')
【讨论】:
有几种方法:
直接删除:
SomeModel.objects.filter(id=id).delete()
从实例中删除它:
instance1 = SomeModel.objects.get(id=id)
instance1.delete()
//不要使用相同的名字
【讨论】:
您可以使用 Django-Truncate 库来删除表的所有数据,而不会破坏表结构。
例子:
pip install django-truncate
settings.py 文件中将“django_truncate”添加到您的 INSTALLED_APPS:INSTALLED_APPS = [
...
'django_truncate',
]
python manage.py truncate --apps app_name --models table_name
【讨论】:
实际上,我从 admin.py 中取消注册模型(我要删除的表数据)。然后我迁移。
python manage.py makemigrations
python manage.py migrate
python runserver
然后我在 admin.py 中注册模型并再次进行迁移。 :) 现在,桌子是空的。这可能不是一个专业的答案,但它帮助了我。
【讨论】: