在Google App Engine上批量获取子实体?
在Google App Engine的Python环境中,我有一个叫做Visit的实体,它的父级是Patient。一个Patient可以有多个Visit。
我需要把最近一次的Visit(还有一些辅助的Visit数据)存放在某个地方,以便以后查询,可能是在另一个子实体中,Brett Slatkin可能会称之为“关系索引实体”。
我希望以批量的方式来完成这件事,像这样:
1. get 100 Patient keys
2. get all Visits that have any of the Patients from 1 as an ancestor
3. go through the Visits and get the latest for each Patient
有没有办法在批量获取中执行第2步呢?
我知道可以从一个键的列表中批量获取实体,也知道可以通过它的祖先来匹配单个实体。
3 个回答
0
如果你在模型 Visit
中设置了一个属性 Patient
,就像这样:
class Patient(db.Model):
pass
class Visit(db.Model):
patient_visited = db.ReferenceProperty(Patient)
那么每个 Patient 实体上会自动生成一个查询属性 visit_set
,这样你就可以像下面这样查询:
for patient in Patient.all():
last_visit = patient.visit_set.order('-visited')
这样就完成了。只需要101个查询,挺不错的。
0
为什么不在病人对象上维护一个病人就诊记录的列表呢?你已经知道最后一次就诊是什么时候,因为它会是列表中最后添加的那个记录。
我的NF检测器一直在疯狂报警,这让我觉得这可能是存储数据的正确解决方案。
3
在这个数据存储中,没有办法进行你想要的那种查询;这就像是连接多个表的数据,而这种操作是不被支持的。第二步将需要进行100次查询。
你可以在每个病人实体中存储一个访问记录的键列表,这样就可以根据这些键简单地批量获取所有相关的实体。