2012-02-22 45 views
1

我从XML文件导入记录,它正在咀嚼内存。我已经通过创建和删除所有元素和子元素来清除内存的XML ElementTree,但它仍然只是堆积如山。Django MemoryError从XML文件导入大量数据

我终于找到了一个解决方案,并希望将其用于其他未来可能会遇到同样问题的人。当我偶然发现这个问题时,我在网上寻找答案:Django MemoryError - How to work with large databases。我的MemoryError并不是因为我的Queryset的大小,因为这些并不那么大,但我想我会试试它。我将所有的objects.all()都更改为objects.all()。iterator(),以查找对象上的任何循环。这并没有太大的作用,因为我只是绕过三组不同的对象,没有一组对象。我不情愿地在settings.py中将DEBUG=True转换为DEBUG=False,并且它将内存使用减少到几乎没有!从Django Docs:

还有一点很重要的是要记住,在开启DEBUG的情况下运行时,Django会记住它执行的每个SQL查询,这在调试时很有用,但它会快速消耗内存在生产服务器上。

这不是生产服务器,它是我的开发服务器。因此,由于所有执行的查询都存储在哪里,它们在哪里以及如何获取它们?如果它们对调试非常有帮助,为什么它们不易获得?

回答

1

这里是如何显示的查询:

from django.db import connection 
print connection.queries 

欲了解更多信息请参阅this faq entry

+0

真棒,伙计。这很酷。感谢您及时的回复。 – Furbeenator 2012-02-22 21:02:25

1

您也可以通过Django的日志记录SQL查询,至少在Django的1.3.x

https://docs.djangoproject.com/en/dev/topics/logging/

+0

谢谢,Sid。我没想过在那里做。 – Furbeenator 2012-02-22 21:24:45

+0

@Furbeenator DEBUG设置为True将导致django-logging无论如何都会记录所有SQL查询。你可能不需要明确地做到这一点。 – Sid 2012-02-22 21:35:08