林试图寻找一个时间范围为特定类型中的一些的值,但对于存在于数据库中的日期的内容没有被该查询返回。

下面是Python代码的提取物:

deltaDays = timedelta(days= 20)
endDate = datetime.date.today()
startDate = endDate - deltaDays

result = db.GqlQuery(
   "SELECT * FROM myData WHERE mytype = :1 AND pubdate >= :2 and pubdate <= :3", type, startDate, endDate
  )

class myData(db.Model):
   mytype = db.StringProperty(required=True)
   value =  db.FloatProperty(required=True)
   pubdate = db.DateTimeProperty(required=True)

在GQL返回数据,但一些我期待行缺少:

 2009-03-18 00:00:00
(missing date in results: 2009-03-20 data exists in database)
 2009-03-23 00:00:00
 2009-03-24 00:00:00
 2009-03-25 00:00:00
 2009-03-26 00:00:00
(missing date in results: 2009-03-27 data exists in database)
 2009-03-30 00:00:00
(missing date in results: 2009-03-31. data exists in database)
 2009-04-01 00:00:00
 2009-04-02 00:00:00
 2009-04-03 00:00:00
 2009-04-06 00:00:00

我经由解的bulkload脚本上传的数据。我能想到被损坏的索引或类似的东西的。该查询用来为另一个表我有工作。但是我已经和来自其他来源的新内容来取代它,而这个新的内容不响应查询以同样的方式。该表具有围绕700.000行如果让任何区别。

我已经做更多的研究蚂蚁,似乎它在AppEngine上数据存储中的错误。 有关错误更多信息,请点击此链接: http://code.google.com/p/googleappengine/issues/细节?ID = 901

我试图滴速索引和没有运气重新创建它。

感谢

有帮助吗?

解决方案

没有看起来我错了。你确定失踪的日期也有MYTYPE ==类型?

我观察到与过去的指标一些有趣的行为。我建议写一个处理程序,通过所有的记录进行迭代,只是把()回在数据库中。或许真的与批量上传无法正常工作。

下面的处理程序的I型使用通过在一个模型中类的所有实体进行迭代:

 class PPIterator(BaseRequestHandler):
  def get(self):
    query = Model.gql('ORDER BY __key__')
    last_key_str = self.request.get('last')
    if last_key_str:
      last_key = db.Key(last_key_str)
      query = Model.gql('WHERE __key__ > :1 ORDER BY __key__', last_key)
    entities = query.fetch(11)
    new_last_key_str = None
    if len(entities) == 11:
      new_last_key_str = str(entities[9].key())
    for e in entities:
      e.put()
    if new_last_key_str:
      self.response.out.write(json.write(new_last_key_str))
    else:
      self.response.out.write(json.write('done'))

您可以使用任何你想通过实体进行迭代。我用在浏览器窗口中使用JavaScript,但发现使成千上万的请求的时候,这是一头猪。这些天,我觉得它更方便地使用Ruby脚本像这样的:

require 'net/http'
require 'json'
last=nil
while last != 'done'
  url = 'your_url'
  path = '/your_path'
  path += "?/last=#{last}" if last
  last = Net::HTTP.get(url,path)
  puts last
end

更新:现在远程API工作可靠,我很少写这种类型的处理程序了。该方法同样适用于你使用那里通过实体远程API控制台迭代的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top