【发布时间】:2014-08-17 07:46:15
【问题描述】:
我有一个表名 UGC,想清除该表中的所有数据。我不想重置整个应用程序,这也会删除所有其他模型中的所有数据。是否可以只清除一个模型?如果有帮助,我还为我的应用程序配置了 South。
【问题讨论】:
标签: python database django models
我有一个表名 UGC,想清除该表中的所有数据。我不想重置整个应用程序,这也会删除所有其他模型中的所有数据。是否可以只清除一个模型?如果有帮助,我还为我的应用程序配置了 South。
【问题讨论】:
标签: python database django models
你可以use raw SQL:
cursor.execute(“DROP TABLE UGC”)
或者你可以直接在 Django shell 中使用 ORM:
UGCModel.objects.all().delete()
这会删除数据(但不是表格),所以你必须小心:)
另一种方法(为了完整性和利用 South)是在模型声明中注释掉模型,迁移然后再放回去(假设没有模型引用它。)
HTH
【讨论】:
在管理界面中,您可以转到该模型的列表页面,然后您可以选择所有模型并使用表格顶部的Delete selected ... 操作。
请记住,无论您以何种方式删除数据,外键默认为ON DELETE CASCADE,因此任何具有您要删除的模型的外键的模型也将被删除。管理界面将为您提供将被删除的模型的完整概述。
【讨论】:
delete() 方法。但是,它确实会遍历查询集并记录每个单独模型实例的删除。与单独删除每个对象相比,此迭代消耗的资源几乎没有,但我可以看到如果查询集那么大,它可能会给您的系统带来多大压力。
今天在使用 django 2.0.2 时遇到了此类问题,因为我创建了我的模型
class Front(models.Model):
pass
并迁移了它,但是当我后来更新模型时,我无法运行
python manage.py makemigrations 因为它在说
You are trying to add a non-nullable field 'update' to front without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows
with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
我的解决方案是什么?
Front
python manage.py makemigrations 删除了麻烦的表/模型python manage.py makemigrations,它重新创建了表/模型,最后python manage.py migrate 迁移了我的更改,一切都已解决!注意:请注意上述指令,因为它会删除表/模型的所有引用/外键 on_delete=models.CASCADE 这是默认值!
【讨论】: