python - 无效过滤器 : Only one property per query may have inequality filters (>=, <=、>、<)

标签 python google-app-engine python-2.7 google-cloud-datastore

我有很多商品可以在特定时间段预订。例如。一个网球场。因此,每个项目都有许多关联的可用时段,每个可用时段由开始时间和结束时间定义。开始时间和结束时间被定义为日期时间对象,因此从 09.00 - 11.30 的可用时段存储为例如。 2013-12-13 09.00(开始时间)至2013-12-13 11.30(结束时间)。

当收到预订请求时,我需要了解网球场在所需时间段是否可用。

因此,我尝试根据开始时间和结束时间过滤可用时段,我的查询如下所示:

desired_availability_start = datetime(2013, 12, 13, 9,0,0)
desired_availability_end = datetime(2013, 12, 13, 10,0,0)
availability_slots = self.availability_slots.filter("begin <= ", desired_availability_start).filter("end >= ", desired_availability_end).fetch(limit=10)

但我收到以下错误

invalid filter: Only one property per query may have inequality filters (>=, <=, >, <)

因为我试图过滤开始和结束属性。

基于输入和有关该主题的其他一些帖子 Inequality Filter in AppEngine DatastoreBadFilterError: invalid filter: Only one property per query may have inequality filters (<=, >=, <, >)我当前的解决方案是首先在开始时进行过滤:

filtered_availability_slots = self.availability_slots.filter("begin <= ", desired_availability_start).fetch(limit=10)

然后最后进行过滤并将过滤后的项目附加到列表中:

final_availability_slots = []              
  for availability in filtered_availability_slots:         
      if availability.end >= desired_availability_end:  
        final_avaialability_slotes.append(availability)   

但这是实现我想要实现的目标的最佳方式吗?

我正在使用 Google App Engine 和 Python

感谢任何帮助

谢谢 托马斯

最佳答案

正如我猜您已经知道的那样,您不能使用数据存储中的不等式过滤器使用多个变量。除非您确实需要,否则您可以仅使用“开始”时间进行过滤,并且仍然可以获得相当准确的结果。

calitem = self.appointments.filter("begin >= ", start).filter("begin <= ", end).fetch(limit=10)

如果您确实需要,使用您的应用程序逻辑,您只能显示不超出“最终”值的项目。我没有看到任何其他方法。

关于python - 无效过滤器 : Only one property per query may have inequality filters (>=, <=、>、<),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20568673/

相关文章:

python-2.7 - 如何在dynamodb中获取插入的最新记录

python - 当列表长度不同时在 Python 中迭代多个列表

python - 使用 AngularJS 在 Tornado 中进行 csrf 检查

docker - 在部署 AppEngine flex 时将参数传递给 Docker 构建

linux - 无法执行 'x86_64-conda_cos6-linux-gnu-gcc' : No such file or directory (pysam installation)

Python:处理具有长参数列表的函数的最佳方法?

python - 在 python 3.6 中导入 Orange 模块时出错

python - AWS Glue ETL 作业缺少爬网程序可见的字段

google-app-engine - 部署 Hadoop 集群时出错(教程): The resource 'projects/project-id was not found

java - 云端点不尊重 Jackson 注释