2011-11-24 46 views
0

比方说,我有一些代码:Django DB连接:是查询对象数组还是只有引用?

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

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

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

当然,你也可以,或者通过使用deferonly得到一些推迟领域的目标要求只有某些列,通过使用valuesvalues_list只得到你感兴趣的人。

请注意,你可以问Django的它在做什么 - 在shell,在调试模式下,做

from django.db import connection 
print connection.queries 

,这将给你所有的数据库查询的列表达在shell会话这一点。

+0

您的意思是在我的代码中只有1个数据库请求? –

相关问题