链接时,应用引擎ListProperty上的时间不等性过滤器会失败

时间:2012-03-06 05:49:14

标签: python google-app-engine datetime google-cloud-datastore listproperty

我在一个实体中有ListProperty,它包含两个时间对象,代表一个星期几的业务开放和关闭时间:

mon_hours = db.ListProperty(datetime.time)
tue_hours = db.ListProperty(datetime.time)
wed_hours = db.ListProperty(datetime.time)
thu_hours = db.ListProperty(datetime.time)
fri_hours = db.ListProperty(datetime.time)
sat_hours = db.ListProperty(datetime.time)
sun_hours = db.ListProperty(datetime.time)

当我使用当前时间AND链查询此实体时,过滤器只能正确返回列表中时间大于且小于的时间的记录,它会以0结果失败:

now = datetime.datetime.now()
q = Place.all()           
q.filter('mon_hours <=', now.time()).filter('mon_hours' >=', now.time())

但是,当我删除其中一个过滤器时,它会返回结果,而不是错误的结果:

now = datetime.datetime.now()
q = Place.all()           
q.filter('mon_hours <=', now.time())

当我手动将分钟设置为00时,它可以出于某种原因:

q = Place.all()           
q.filter('mon_hours <=', datetime.datetime(1970,1,1,10,00).time()).filter('mon_hours' >=', datetime.datetime(1970,1,1,10,00).time())

最后一个查询是期望的结果,但时间需要是任意分钟的当前时间。

WTF?!

2 个答案:

答案 0 :(得分:1)

这段代码是完全你尝试过的吗?请注意,数据存储区不喜欢指示空范围的范围过滤器,并且在这种情况下不返回任何结果 - 因此,例如,你实际上运行了类似q.filter('a&lt;',t).filter('a&gt; =',t)的东西来解释你的结果。

答案 1 :(得分:1)

我的坏。我假设app引擎在像mongodb这样的列表属性上工作。如果将两个不等式过滤器应用于列表属性,则列表中的一个值必须与两者相匹配。在00和30分钟的成功结果标记使用&gt; =,&lt; =其中一个值与两者匹配的工件。

卫生署。