在Google App Engine上批量获取子实体?

1 投票
3 回答
683 浏览
提问于 2025-04-15 22:29

在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次查询。

你可以在每个病人实体中存储一个访问记录的键列表,这样就可以根据这些键简单地批量获取所有相关的实体。

撰写回答