django何时将数据加载到内存?
让我们有一个简单的模型:django何时将数据加载到内存?,django,django-models,Django,Django Models,让我们有一个简单的模型: class NewModel(models.Model): json_data = models.JSONField(default=dict) 那么让我们来了解一下: model = NewModel.objects.get(pk=1) # 1 data = model.json_data # 2 value = data.get("key") # 3 因为json_数据非常大(每个值大约1-2MB,最小值为20),所以问题是,django何时
class NewModel(models.Model):
json_data = models.JSONField(default=dict)
那么让我们来了解一下:
model = NewModel.objects.get(pk=1) # 1
data = model.json_data # 2
value = data.get("key") # 3
因为json_数据非常大(每个值大约1-2MB,最小值为20),所以问题是,django何时将数据加载到内存
如果我理解正确,那么1只返回模型的点,而不加载它。那么它是在属性调用时加载的吗?或者什么时候打电话
我想了解它是如何工作的,并优化加载,这样我就不会加载不必要的值
因为json_数据
相当大(每个值大约1-2MB,最小值为20个),问题是,django何时将数据加载到内存
默认情况下,在计算queryset时,它会加载内存中表的所有列。因此,当您执行NewModel.objects.get(pk=1)
时,该列将加载到内存中
如果我理解正确,那么1只返回模型的点,而不加载它
否,它在检索记录时加载表中的所有列,以防止大量额外的数据库往返
我想了解它是如何工作的,并优化加载,这样我就不会加载不必要的值
可以使用来防止立即加载列,因此:
obj = NewModel.objects.defer('json_data').get(pk=1)
obj=NewModel.objects.defer('json_data').get(pk=1)
不会直接加载json_数据。只有在以后需要数据的情况下,它才会进行额外的查询以将数据提取到内存中。如果您因此很少需要json_data
,那么延迟该列是值得的,当然,如果您经常需要该字段,它可能会产生负面影响,因为您会增加到数据库的往返次数