2014-02-19 98 views
0

检索数据我有一个表中谷歌数据存储保存在ňñ价值观,其中之一是timestampGQL查询(蟒蛇)使用时间戳

timestamp属性被定义像这样,表类中(爪哇):

@Persistent 
private Date timestamp; 

该表是这样的:

id | value |   timestamp  
---------------------------------------------------------- 
    1 | ABC  | 2014-02-02 21:07:40.822000 
    2 | CDE  | 2014-02-02 22:07:40.000000 
    3 | EFG  |  
    4 | GHI  | 2014-02-02 21:07:40.822000 
    5 | IJK  |  
    6 | KLM  | 2014-01-02 21:07:40.822000 

timestamp列被添加后的表,所以有些行没有相应的值timestamp

我在尝试,使用Python Google App Engine来构建一个api,它返回具有某个值的时间戳>=的行的总数。

例如:

-- This is just an example 
SELECT * FROM myTable WHERE timestamp >= '2014-02-02 21:07:40.822000' 

我做了这个类,在python:

import sys 
... 
import webapp2 

from google.appengine.ext import db 

class myTable(db.Model): 
    value = db.StringProperty() 
    timestamp = datetime.datetime 

class countHandler(webapp2.RequestHandler): 
    def get(self, tablename, timestamp): 

     table = db.GqlQuery("SELECT __key__ FROM " + tablename + " WHERE timestamp >= :1", timestamp) 
     recordsCount = 0 

     for p in table: 
      recordsCount += 1 

     self.response.out.write("Records count for table " + tablename + ": " + str(recordsCount)) 

app = webapp2.WSGIApplication([ 
    ('/count/(.*)/(.*)', countHandler) 
], debug=True) 

我已经成功地部署了它,我可以调用它,但由于某种原因我不明白它总是说

Records count for table myTable: 0 

我与时间戳数据类型挣扎。我认为这个问题是有什么想法?应该声明哪种类型?

谢谢!

+0

你肯定时间戳不是一个字符串?据我所知,它需要是日期时间。 –

+0

@JimmyKane我在Java类中将它定义为'Date',所以它应该是date ..我会给它一个尝试,python方面,'timestamp = db.StringProperty()'如果这是你意思是 – BeNdErR

+0

我认为你需要有日期时间格式的时间戳。只需将其转换为datetime并将该对象用于查询即可。通知它是否有效。我有一些时间来使用它在我的查询和atm我没有方便测试。 –

回答

2

你的问题(如评论中所讨论的)似乎是你传递一个字符串(可能)到GqlQuery参数。

为了过滤您的查询datetime您需要将datetime对象传递给查询参数。关于如何转换,请看看here

小例子:

# not sure how your timestamps are formatted but supposing they are strings 
# of eg 2014-02-02 21:07:40.822000 
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S.%f") 

table = db.GqlQuery("SELECT __key__ FROM " + tablename + " WHERE timestamp >= :1", timestamp) 
+1

实际上,我用另一个例子:'tmstmp = dateutil.parser.parse(timestamp)'。请注意,这样,我需要下载并导入dateutil库。 – BeNdErR

+0

@BeNdErR当然可以。我比较熟悉日期时间模块。很高兴它解决了它。 –

+1

可能你的解决方案会救了我新的lib的导入:) – BeNdErR