0

我有一个正在处理的 Django 项目,其中包含很多表和数据。我们仍处于开发模式,因此我们正在进行大量测试。我希望现在能够让一些用户访问该项目,以便使用假数据进行操作。我花时间设置所有虚假数据,以便当他们打开网络应用程序时,它已经填充了处于各种状态的记录 - 因为他们可能会在系统投入生产时找到它。

我的目标是让他们玩转一切,然后有一个很大的“重置”按钮,他们可以点击它,这将使整个事情回到原点——可以这么说。基本上,它会将所有记录和数据恢复到我将其与数据一起交给他们时的状态。这样,他们可以四处乱转,测试一些东西,然后重新开始做更多的测试。

编辑 - 我应该说它只是一个测试人员,所以重置不会影响其他任何人

我在运行 mysql restore 命令的 Django 中快速查看,但它挂起。我的观点是这样的:

def reset_db(request):
  reset = "mysql -v -u garfonzo -pMyPassword dbName < db_reset.sql"
  os.system(reset)
  return HttpResponse("success?")

它应该做的就是将数据库恢复到原始状态。但是,它挂起。使用该-v命令,我看到它所做的最后一件事是:

...a whole bunch of MySQL queries.... then
--------------
/*!40000 ALTER TABLE `auth_permission` ENABLE KEYS */
--------------

--------------
UNLOCK TABLES
--------------

--------------
DROP TABLE IF EXISTS `auth_user`
--------------

它只是坐在这里......什么都不做,然后我的网络应用程序没有响应。我必须终止进程并重新开始(手动重置)。

我想我的问题是双重的:

  1. 这是为用户实现重置按钮的最佳方式吗?如果没有,有什么更好的方法?
  2. 如果这是实现这一目标的最佳方法,为什么代码会挂起?

谢谢你的帮助。

4

2 回答 2

1

我建议您为所有初始数据提供固定装置,并为用户提供运行 syncdb 的视图,这将使用您的初始数据再次重置所有内容。但是我自己还没有尝试过。

from django.core.management import call_command

def reset_db(request):
     call_command('syncdb', interactive=False)
于 2013-02-19T18:50:47.913 回答
0

这是我用来恢复数据库的命令。确保您在 unix 终端上。mysql -u(username) -p(password) (数据库名)

于 2015-03-29T21:37:38.497 回答