谷歌的AppEngine:日期范围内没有返回正确的结果
-
05-09-2019 - |
题
林试图寻找一个时间范围为特定类型中的一些的值,但对于存在于数据库中的日期的内容没有被该查询返回。
下面是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控制台迭代的代码。
不隶属于 StackOverflow