我有一个设置(Django 1.11),里面有OOK,EEK和其他不相关的应用程序。我想删除OOK的所有数据,同时保留EEK(和其他)不变。理想情况下,我希望所有的主键也被重置,这样第一个新的OOK模型将得到1,依此类推。这可能吗?我能找到的只有reset和sqlclear,它们都已弃用。flush从数据库中删除了所有数据,因此不是我想要的数据我承认这是件奇怪的事,但这是上帝给我的手...
reset
sqlclear
flush
xnifntxz1#
您可以删除该<app>的所有表,然后只迁移该<app>,这样就可以重置<app>的表。在django 1.7+中,您可以执行以下操作:
<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
ryevplcw2#
如果允许您替换数据库,您可以将需要的数据导出到fixture,然后在其中的json中进行一些巧妙的文本处理,比如找到所有ID字段并将它们从1替换。然后将结果重新导入到一个干净的数据库中?id由postgresql自动递增,根据this answer,您可以重置索引序列,但甚至不确定它是否可以回到1。但重置指数的意义究竟何在?
ID
id
fv2wmkja3#
这在django上可能做不到,但在原始SQL上是可以做到的:
SET FOREIGN_KEY_CHECKS = 0; TRUNCATE OOK_table1; TRUNCATE OOK_table2; […] SET FOREIGN_KEY_CHECKS = 1;
在执行此操作之前,请务必备份数据库!
3条答案
按热度按时间xnifntxz1#
您可以删除该
<app>
的所有表,然后只迁移该<app>
,这样就可以重置<app>
的表。在django 1.7+
中,您可以执行以下操作:https://docs.djangoproject.com/en/2.0/ref/django-admin/#django-admin-migrate
ryevplcw2#
如果允许您替换数据库,您可以将需要的数据导出到fixture,然后在其中的json中进行一些巧妙的文本处理,比如找到所有
ID
字段并将它们从1替换。然后将结果重新导入到一个干净的数据库中?id
由postgresql自动递增,根据this answer,您可以重置索引序列,但甚至不确定它是否可以回到1。但重置指数的意义究竟何在?
fv2wmkja3#
这在django上可能做不到,但在原始SQL上是可以做到的:
在执行此操作之前,请务必备份数据库!