假设我有代码:
obj = MyUser.objects.get(pk=1)
name = obj.name
age = obj.age
email = obj.email
phone = obj.phone
city = obj.city
所以我有obj
。这是一个包含MyUser对象的所有信息的数组,还是只是一个引用?
我很有意思name = obj.name
向DB发送第一个请求,
age = obj.age
向DB发送第二个请求,
email = obj.email
向DB发送第三个请求,
phone = obj.phone
向DB发送第四个请求,
city = obj.city
向DB发送第五个请求
或obj = MyUser.objects.get(pk=1)
时只有一个请求。
它并不暗示它会影响系统性能,所以这是一个非常有趣的问题。
谢谢!
答案 0 :(得分:1)
它既不是:它是一个对象,其值在实例化时从数据库初始化。 Django默认选择整行,并使用列值实例化对象。
按照你描述的方式做这件事会非常奇怪,效率极低。如果您要求查询集会发生什么?每行每列一个查询?
当然,您只需要使用values
或values_list
来获取您感兴趣的列,或者使用defer
或{{1获取一个延迟了一些字段的对象。
请注意,您可以向Django询问它在做什么 - 在shell中,在调试模式下,执行
only
将为您提供该shell会话中直到该点的所有数据库查询的列表。