Google Datastore - 是否支持懒加载?
如果我有一个顾客对象,这个对象里面有一个订单列表,是用db.ReferenceProperty来声明的。
过了一段时间,这个订单列表可能会变得非常庞大。如果我把顾客对象拉出来,会不会导致我把所有的订单都一起拉出来呢?
1 个回答
6
是的,db.ReferenceProperty 字段是懒加载的。根据文档的说明:
ReferenceProperty 会自动引用和解除引用模型实例作为属性值:你可以直接将一个模型实例赋值给 ReferenceProperty,它的键会被使用。ReferenceProperty 的值可以像模型实例一样使用,当第一次以这种方式使用时,数据存储中的实体会被获取,并创建模型实例。未被触及的引用属性不会查询不必要的数据。
所以,比如说:
# Any reference properties not loaded yet
customer = Customer.get_by_id(1)
print customer.name
print customer.address
# Assuming customer.order is a ReferenceProperty, now is when it
# would be loaded from the datastore.
print customer.order.created_at