如何删除Django中一个且仅一个应用的所有数据

v9tzhpje  于 2023-03-09  发布在  Go
关注(0)|答案(3)|浏览(122)

我有一个设置(Django 1.11),里面有OOK,EEK和其他不相关的应用程序。我想删除OOK的所有数据,同时保留EEK(和其他)不变。理想情况下,我希望所有的主键也被重置,这样第一个新的OOK模型将得到1,依此类推。
这可能吗?
我能找到的只有resetsqlclear,它们都已弃用。flush从数据库中删除了所有数据,因此不是我想要的数据
我承认这是件奇怪的事,但这是上帝给我的手...

xnifntxz

xnifntxz1#

您可以删除该<app>的所有表,然后只迁移该<app>,这样就可以重置<app>的表。在django 1.7+中,您可以执行以下操作:

$ python manage.py migrate OOK zero //This command unapply your migrations
$ python manage.py migrate OOK

https://docs.djangoproject.com/en/2.0/ref/django-admin/#django-admin-migrate

ryevplcw

ryevplcw2#

如果允许您替换数据库,您可以将需要的数据导出到fixture,然后在其中的json中进行一些巧妙的文本处理,比如找到所有ID字段并将它们从1替换。然后将结果重新导入到一个干净的数据库中?
id由postgresql自动递增,根据this answer,您可以重置索引序列,但甚至不确定它是否可以回到1。
但重置指数的意义究竟何在?

fv2wmkja

fv2wmkja3#

这在django上可能做不到,但在原始SQL上是可以做到的:

SET FOREIGN_KEY_CHECKS = 0;

TRUNCATE OOK_table1;
TRUNCATE OOK_table2;
[…]

SET FOREIGN_KEY_CHECKS = 1;

在执行此操作之前,请务必备份数据库!

相关问题