GAE数据存储 - 计算一分钟前和两分钟前的记录?

时间:2012-04-14 17:11:46

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

我正在使用带有python的GAE数据存储区,我想计算并显示两个最近日期之间的记录数。例如,在数据存储区中,两分钟前和三分钟前的时间签名存在多少条记录。 谢谢。

#!/usr/bin/env python

import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from datetime import datetime

class Voice(db.Model):
    when = db.DateTimeProperty(auto_now_add=True)


class MyHandler(webapp.RequestHandler):
    def get(self):
        voices = db.GqlQuery(
            'SELECT * FROM Voice '
            'ORDER BY when DESC')
        values = {
            'voices': voices
        }
        self.response.out.write(template.render('main.html', values))
    def post(self):
        voice = Voice()
        voice.put()
        self.redirect('/')
        self.response.out.write('posted!')  

def main():
    app = webapp.WSGIApplication([
        (r'.*', MyHandler)], debug=True)
    wsgiref.handlers.CGIHandler().run(app)

if __name__ == "__main__":
    main()

2 个答案:

答案 0 :(得分:2)

count = db.Query().filter('when >', two_minutes_ago).filter('when <', one_minute_ago).count()

您可以在documentation

中详细了解有关查询的信息

要获取two_minutes_agoone_minute_ago的值,您可以使用datetime模块:

>>> datetime.datetime.now()
datetime.datetime(2012, 4, 14, 14, 26, 18, 343269)
>>> datetime.datetime.now() - datetime.timedelta(minutes=1)
datetime.datetime(2012, 4, 14, 14, 25, 49, 860390)

在Python REPL中尝试一下,以便更熟悉它。

答案 1 :(得分:0)

您的查询将需要一个复合索引来支持按日期排序。这意味着任何最近的更新最终都是一致的。由于这个原因,最新的更新可能不会显示。喜欢听到任何变通方法。