重置所有表数据但恢复初始设置

Reset all tables data but and restore initial settings

我在开发中使用了Kiwi TCMS系统,所以我创建了更多的测试数据。现在我想删除所有测试数据,所以我尝试按照文章中的建议使用以下命令重置 Kiwi DB tables, https://kiwitcms.org/blog/atodorov/2018/07/30/how-to-backup-docker-volumes-for-kiwi-tcms/

首先进行备份,

docker exec -it kiwi_web /Kiwi/manage.py dumpdata --all --indent 2 > database.json

然后删除所有table条记录,

docker exec -it kiwi_web /bin/bash -c '/Kiwi/manage.py sqlflush | /Kiwi/manage.py dbshell'

我知道这个命令已经从数据库中完全删除了包括初始设置数据在内的所有内容,所以我尝试使用以下命令应用初始设置,

docker exec -it kiwi_web /Kiwi/manage.py migrate
docker exec -it kiwi_web /Kiwi/manage.py createsuperuser
docker exec -it kiwi_web /Kiwi/manage.py refresh_permissions

前两个工作正常,但最后一个refresh_permissions抛出错误,请参考错误截图

这导致,一些与权限相关的设置如组没有恢复。

我似乎以错误的方式删除了所有数据并使用所需的初始设置进行了恢复。请纠正我什么是最好的方法。

您遇到错误是因为您不了解发生了什么。上面引用的命令和博客 post 用于整个数据库的备份和恢复,而不是选择性地删除您不想再存在的信息:

  1. sqlflush 将从所有表中删除所有信息
  2. migrate 将在某些表中创建数据库模式(已经存在)和初始记录。因为数据库模式已经存在,并且最后应用迁移的内部 Django 引用没有改变,你会收到“没有要应用的迁移”消息
  3. 因为没有应用任何迁移,所以没有创建一些初始记录。在这种情况下,一个具有硬编码名称“Administrator”的组。
  4. refresh_permissions 失败,因为它正在寻找名为“Administrator”的组

您可以:

  1. 手动重新创建所有丢失的记录或
  2. 创建 Kiwi TCMS 的全新安装并将其用作您的主要实例或
  3. 保留 POC 实例并仅删除您不想要的记录 - 从管理面板逐一删除或通过 manage.py shell.
  4. 使用 ORM 查询