2010-04-05 184 views
1

對象用戶有一個外鍵關係來解決。樣本1和2之間是否有區別?樣本1是否多次運行查詢?或者是地址對象緩存?Django的數據庫緩存

# 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

地址對象確實被高速緩存。你可以看到這一點,如果你之前和訪問user.address後打印的user.__dict__內容。例如:

>>> user.__dict__ 
{'date_joined': datetime.datetime(2010, 4, 1, 12, 31, 59), 
'email': u'[email protected]', 
'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'[email protected]', 
...etc} 

所以用戶對象獲得,其用於在相關對象上後續查找一個_address對象。

您可以使用select_related()當你第一次得到了用戶甚至訪問地址之前,預填充這個緩存,所以你只打了一次數據庫。