1

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

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

4

3 回答 3

2

您可以为日期添加另一个字段。ComputedProperty 可能对此有意义。或者,您可以从一天的开始分批提取,并在一天结束时停止提取。我想你可以根据一天内通常有多少约会来制定一个合理的默认设置,以保持这种合理的效率。

于 2012-09-20T23:07:28.673 回答
1

最大的问题是“日期”意味着根据用户的时区不同的开始和结束“时间”。而且您不能强迫所有用户一生都坚持一个时区,更不用说每年两次 DST 更改。因此,您不能像建议的那样简单地在实体中创建一个新属性来存储“日期”对象。(这就是 GAE 没有“日期”类型属性的原因。)

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

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

于 2012-09-21T17:54:29.083 回答
0
"SELECT * FROM appointments WHERE start_time < {0} AND end_time > {0}".format(time_lookup)

或者如果 appengine 不允许你这样做

Things.all().filter("end_time >", foo).filter("start_time <", foo)

http://nick.zoic.org/art/python/multiple_inequalities/

比较谷歌应用引擎数据存储中的许多日期范围(多对多,Python)可能会有所帮助

于 2012-09-20T23:09:23.227 回答