我在尝试在我的站点上设置自动备份时遇到了一个问题。问题归结为以下几个方面。在
我打开pythonshell并调用dumpdata命令两次。它第一次工作,第二次返回空列表。之后,所有进一步的dumpdata调用都返回空列表:
>>> python manage.py shell
>>> from django.core.management import call_command
>>> call_command("dumpdata")
[{"pk": 1, (...) // lots of data //
>>> call_command("dumpdata")
>>> []
为了让它再次工作,我需要重新启动pythonshell。在
编辑:我使用django1.4和python2.6
编辑2:我目前的假设是,这个问题与这个问题有关:https://code.djangoproject.com/ticket/5423-5年前就确定了,根据django1.5发行说明,将在下一个版本中解决。有人知道如何在不改变机器上运行的1.4框架代码的情况下解决这个问题吗?在
Edit3:但是整个数据库的sql转储只有0.5MB,这使得序列化内存不足是很不可能的。不管怎样,在这种情况下,我不会得到一个明显的错误吗?在
编辑4:解开谜团。正如Tomasz Gandor正确判断的那样,问题是shell在一个事务中执行命令,在其中一个命令导致DBError之后,将忽略更多的DB调用,如下所述:https://code.djangoproject.com/ticket/10813。为什么第一次转储数据时数据库错误没有被明确报告,对我来说仍然是个谜。在
我看到django在搞乱交易。在
我在调试器下执行了一个简单的示例:
并称之为:
^{pr2}$我的日志.txt以“-\n[]\n”结尾
在调试器中运行后,我发现
django.core.management.commands.dumpdata.handle()
那个model.objects.all()一直返回[]。在我打过电话model.objects.iterator(),并得到异常:
所以,我破解了一段代码,它与事务本身有关:
每次都会把整个数据库都吐出来!在
相关问题 更多 >
编程相关推荐