Django DB连接:是查询对象数组还是仅引用?

时间:2011-11-24 08:45:27

标签: database django performance django-orm django-database

假设我有代码:

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)时只有一个请求。

它并不暗示它会影响系统性能,所以这是一个非常有趣的问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

它既不是:它是一个对象,其值在实例化时从数据库初始化。 Django默认选择整行,并使用列值实例化对象。

按照你描述的方式做这件事会非常奇怪,效率极低。如果您要求查询集会发生什么?每行每列一个查询?

当然,您只需要使用valuesvalues_list来获取您感兴趣的列,或者使用defer或{{1获取一个延迟了一些字段的对象。

请注意,您可以向Django询问它在做什么 - 在shell中,在调试模式下,执行

only

将为您提供该shell会话中直到该点的所有数据库查询的列表。