【发布时间】:2017-04-12 14:20:04
【问题描述】:
我有一个带有 BinaryField 的 Django 模型:
class MyData(models.Model):
someData = models.CharField()
data = models.BinaryField()
在我的应用程序中,我需要遍历大量行。当然我将二进制字段标记为延迟:
myDataList = MyData.objects().filter(...).defer('data')
for myData in myDataList:
doSmthWithData(myData.data)
...
初始请求的结果需要少量内存。但是,当我遍历查询集时,我从数据库中获取二进制数据。由于二进制字段的大小,内存很快就会耗尽。
我们可以做一个技巧来释放内存——在循环结束时将data 设置为None:myData = None。但是在这种情况下要修改和保存实体我需要从数据库中再次查询它,否则二进制数据会丢失。
我们还有其他方法可以从内存中删除二进制数据吗?比如:set_defer(myData.data)
【问题讨论】:
标签: python django memory deferred