Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不平等过滤日期和数字_Python_Google App Engine_Date_Inventory - Fatal编程技术网

Python 不平等过滤日期和数字

Python 不平等过滤日期和数字,python,google-app-engine,date,inventory,Python,Google App Engine,Date,Inventory,我试图查询我的Google应用程序引擎数据存储[Python],它有一个项目名称、生产日期和发货项目数量。数据存储中约有100万条记录,而且还在不断增加 情景: 获取所有在某个日期[用户输入]后装运超过x个项目[用户输入]并制造的项目[用户输入]名称。 基本上是一种库存检查 有效地证明了2个关于性质的不等式。 但由于在GAE,我无法做到这一点 搜索此问题。但是,到现在为止运气都不好。你遇到过这个问题吗?如果是,您是否能够解决此问题?请让我知道 同样在Google I/O 2010中,Alfred

我试图查询我的Google应用程序引擎数据存储[Python],它有一个项目名称、生产日期和发货项目数量。数据存储中约有100万条记录,而且还在不断增加

情景: 获取所有在某个日期[用户输入]后装运超过x个项目[用户输入]并制造的项目[用户输入]名称。 基本上是一种库存检查

有效地证明了2个关于性质的不等式。 但由于在GAE,我无法做到这一点

搜索此问题。但是,到现在为止运气都不好。你遇到过这个问题吗?如果是,您是否能够解决此问题?请让我知道

同样在Google I/O 2010中,Alfred Fuller提到他们将很快取消这一限制。已经过去8个多月了,但这一限制现在仍然存在。不幸的是

如果有人能够绕过这一限制,请给出答案,我将不胜感激


非常感谢。

不幸的是,您无法绕过此限制,但我可以帮助您以稍微不同的方式对数据建模

首先,Bigtable适合于快速读取大型数据库——当有一百万人同时点击你的应用程序时,你会这样做。这里你要做的是一份关于历史数据的报告。虽然我建议将报告转移到RDBMS,但有一种方法可以在Bigtable上实现

首先,在项目模型上重写put()方法,以便在保存日期之前拆分日期。你要做的是

def put(self):
  self.manufacture_day = self.manufacture_date.day
  self.manufacture_month = self.manufacture_date.month
  self.manufacture_year = self.manufacture_date.year
  super(self.__class__, self).put()
您可以对任何粒度级别执行此操作,即使是小时、分钟、秒等等

您只需加载和保存项目实体,即可将其追溯应用于数据库。这方面的工作非常方便

然后将查询更改为仅在项目计数上使用不相等,并选择希望使用普通相等的天数/月/年。您可以通过触发多个查询或使用IN子句来执行范围。(不管怎么说,它也做同样的事情)


这似乎是人为的,很难做到,但请记住,如果你这样做,你的报告几乎会在瞬间运行,即使数百万人试图同时运行它们。你可能不需要这种秤,但是。。。这就是你得到的:D

基于Sudhir的答案,我可能会根据你关心的粒度将每个记录分配给一个制造日期“bucket”。如果您的生产日期范围超过几年,请使用每月桶。如果你的活动范围仅在去年,每周一次

现在,当您想要查找给定范围内销售和生产日期>n的记录时,请在该范围内每个bucket执行一次查询,并对您不感兴趣的项目进行后期筛选

例如(完全未经测试):

然后,您应该能够像这样使用:

widgets.filter("sold >", 7).filter_date_after(datetime.datetime(2010,11,21))
留给读者作为练习:

  • 使其与添加到末尾的其他过滤器配合使用
  • 多个存储桶大小允许您始终查询ln(日期范围内的天数)存储桶

谢谢你的回答。问题是我需要“获取所有已装运超过x个项目且生产日期超过某个项目的项目名称”。即使我将日期分为日、月和年,我也不会使用日、月和年的正常等式来获取所有记录。如果您希望记录在2010年10月15日之后,您将搜索year=2011,year=2010&month=12,year=2010&month=11,year=2010&month=10&date=31。。。你明白了。告诉你这是人为的:D
widgets.filter("sold >", 7).filter_date_after(datetime.datetime(2010,11,21))