不知道有没有人考虑过这个问题?
在rest-framework框架中实现一个视图类,继承ModelViewSet时候,通常会构建一个queryset 代码如下:
class ProviderView(ModelViewSet):
# GenericAPIView类成员
queryset = Provider.objects.all()
print(queryset)
# 打印 queryset 的内存大小
memory_size = sys.getsizeof(queryset)
print(f"Memory size of queryset>>: {memory_size} bytes")
serializer_class = ProviderSerializer
pagination_class = LimitedPagination
# views.APIView类成员
permission_classes = [ProviderPermission]
无论Provider模型数据库有多少数据(测试使用 18条或者370条)打印 queryset 的内存大小总是48bytes,这是否正确?
我最原始疑惑是 django程序在启动的时会执行queryset = Provider.objects.all(),当provider表中数据非常大的时候,会不会有内存溢出的问题?
通过上面的打印信息来看,好像是不会加载所有数据到内存中的,我不是很确定,是否有人可以给个确定的答案,非常感谢。
打印信息如下:
<QuerySet [<Provider: Provider object (1)>, <Provider: Provider object (2)>, <Provider: Provider object (3)>, <Provider: Provider
object (4)>, <Provider: Provider object (5)>, <Provider: Provider object (6)>, <Provider: Provider object (7)>, <Provider: Provider object (8)>, <Provider: Provider object (9)>, <Provider: Provider object (10)>, <Provider: Provider object (11)>, <Provider: Provider object (12)>, <Provider: Provider object (13)>, <Provider: Provider object (14)>, <Provider: Provider object (15)>, <Provider: Provider object (16)>, <Provider: Provider object (17)>, <Provider: Provider object (18)>, <Provider: Provider object (19)>, <Provider: Provider object (20)>, '...(remaining elements truncated)...']>
Memory size of queryset>>: 48 bytes