Django数据库缓存

时间:2010-04-05 06:33:00

标签: django django-models

对象用户具有要解决的外键关系。样品1和2之间有区别吗?样本1是否多次运行查询?或者地址对象是否已缓存?

# Sample 1
country = user.address.country
city = user.address.city
state = user.address.state

# Sample 2
address = user.address
country = address.country
city = address.city
state = address.state

1 个答案:

答案 0 :(得分:1)

地址对象确实已缓存。如果您在访问user.__dict__之前和之后打印user.address的内容,则可以看到此内容。例如:

>>> user.__dict__
{'date_joined': datetime.datetime(2010, 4, 1, 12, 31, 59),
 'email': u'user@test.com',
 'first_name': u'myfirstname',
 'id': 1L,
 'is_active': 1,
 'is_staff': 1,
 'is_superuser': 1,
 'last_login': datetime.datetime(2010, 4, 1, 12, 31, 59),
 'last_name': u'mylastname',
 'password': u'sha1$...$...',
 'username': u'myusername'}

>>> country = user.address.country
>>> user.__dict__
{'_address': <myapp.models.address object at 0xwherever,
 'email': u'user@test.com',
 ...etc}

因此,用户对象获得了一个_address对象,该对象用于后续查找相关对象。

当您第一次让用户在访问地址之前预先填充此缓存时,您可以使用select_related(),因此您只需访问数据库一次。