Django - 通过python运行mysql恢复

时间:2013-02-19 17:53:13

标签: mysql django

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

我的目标是允许他们玩弄所有东西,但是然后有一个大的“重置”按钮,他们可以击中,这将使整个事情回到原点 - 可以这么说。基本上,它会将所有记录和数据恢复到我用数据交给他们时的方式。通过这种方式,他们可以捣乱,测试,然后重新开始并进行更多测试。

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

我在Django中快速浏览了一个运行mysql restore命令的命令,但是它正在挂起。我的观点如下:

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. 如果这是实现此目的的最佳方法,为什么代码会挂起?
  3. 感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我建议您为所有初始数据提供灯具,并为用户提供运行syncdb的视图,这将使用您的初始数据重新设置所有内容。但是我自己没试过。

from django.core.management import call_command

def reset_db(request):
     call_command('syncdb', interactive=False)

答案 1 :(得分:0)

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