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

如何删除Django中一个且仅一个应用程序的所有数据,django,Django,我有一个设置(Django 1.11),有几个应用程序,包括OOK、EEK和其他不相关的应用程序。我想删除OOK的所有数据,同时保持EEK(和其他)不变。理想情况下,我希望所有的主键也被重置,这样第一个新的OOK模型将得到1,依此类推 这可能吗 我所能找到的就是reset和sqlclear,它们都不推荐使用flush从数据库中删除了所有数据,因此不是我想要的 我承认这是一件奇怪的事情,但这是给我的手…如果你被允许替换数据库,你可以将你需要的数据导出到一个装置中,然后在那里的json中进行一些巧妙

我有一个设置(Django 1.11),有几个应用程序,包括OOK、EEK和其他不相关的应用程序。我想删除OOK的所有数据,同时保持EEK(和其他)不变。理想情况下,我希望所有的主键也被重置,这样第一个新的OOK模型将得到1,依此类推

这可能吗

我所能找到的就是
reset
sqlclear
,它们都不推荐使用
flush
从数据库中删除了所有数据,因此不是我想要的


我承认这是一件奇怪的事情,但这是给我的手…

如果你被允许替换数据库,你可以将你需要的数据导出到一个装置中,然后在那里的json中进行一些巧妙的文本处理,比如找到所有
ID
字段并从1替换它们。然后将结果重新导入一个干净的数据库

id
s是由postgresql自动递增的,根据您可以重置索引序列,但甚至不能确定它是否可以返回到1


但是重置索引的真正意义是什么呢?

这在django中可能是不可能的。但是,使用原始SQL是可行的:

SET FOREIGN_KEY_CHECKS = 0;

TRUNCATE OOK_table1;
TRUNCATE OOK_table2;
[…]

SET FOREIGN_KEY_CHECKS = 1;

⚠ 在进行备份之前,请先备份数据库

我认为您可以实现这种行为—据我所知,删除该

的所有表,分发
id
s,是发生在数据库层的事情,因此Django对此没有什么可说的。您可以通过原始查询执行此操作,但这可能不是一个好主意。最简单的方法是使用
python manage.py flush
您可以阅读@WillemVanOnsem文档,我明白了,但这些是我必须满足的要求。我很乐意处理原始SQL,显然,在对将要备份的主数据库执行此操作之前,我会对其进行测试。@Sardathrion我的错误,我没有正确阅读它。因此,在我看来,这似乎是不可能的,但我将等待与此领域更相关的人的回答。@Sardathrion:对于MySQL,您可以使用一些索引作为项目的序列号来重置索引。经理希望他们返回到1或1000,这是最简单的。这样做会不会丢失OOK的所有数据?除非您也有数据迁移…是的,但这正是他要求的“…我想删除OOK的所有数据…”。不是吗?这很危险,因为它会导致在其他应用程序中取消应用迁移!另外,不幸的是,如果您的数据迁移没有反向功能,那么它就不起作用。但在数据迁移中添加虚拟反向lambda函数并不是什么大问题。
$ python manage.py migrate OOK zero //This command unapply your migrations
$ python manage.py migrate OOK