如何从应用程序引擎中的数据存储区中获取基于时间的实体

时间:2012-09-20 23:03:18

标签: python google-app-engine app-engine-ndb

我在app引擎上有一个应用程序,这个应用程序有一个名为Appointment的实体。约会有一个start_time和一个end_time。我想根据时间获取约会,所以我想获得某一天的所有约会,例如。

由于app引擎不支持基于两个字段的不等式查询,我该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以为该日期添加其他字段。 ComputedProperty可能对此有意义。 或者你可以从一天开始,分批获取,并在你到达一天结束时停止提取。我想你可以根据你在一天内通常有多少次约会来提出合理的默认值,以保持合理的效率。

答案 1 :(得分:1)

最大的问题是“日期”意味着不同的开始和结束“时间”取决于用户的时区。并且你无法强迫所有用户在所有生命中坚持一个时区,更不用说每年两次DST更改了。因此,您无法在实体中创建新属性来存储“日期”对象,如建议的那样。 (这就是GAE没有“日期”类型属性的原因。)

我构建了一个调度应用程序。当用户指定事件的期望范围(可以是一天,一周或一个月)时,我检索结束时间大于请求范围的开始时间的所有事件,然后我循环遍历它们直到我找到开始时间小于范围结束时间的最后一个事件。

您可以根据请求的范围指定要在一个请求中获取的实体数量(月份比一天更多)。例如,如果给定的日历可能每天有5-10个事件,则足以获取前10个实体(如果不满足条件,您总是可以获取更多实体)。例如,您可以将批量大小设置为100个月。然而,这是一种微观优化。