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
,那么延迟该列是值得的,当然,如果您经常需要该字段,它可能会产生负面影响,因为您会增加到数据库的往返次数