代码之家  ›  专栏  ›  技术社区  ›  hekevintran

Django数据库缓存

  •  1
  • hekevintran  · 技术社区  · 16 年前

    对象用户具有要寻址的外键关系。样品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 回复  |  直到 16 年前
        1
  •  1
  •   Daniel Roseman    16 年前

    地址对象确实已缓存。如果您打印 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() 当您第一次让用户在访问地址之前预先填充这个缓存时,因此您只访问数据库一次。