繁体   English   中英

在Google App Engine的数据存储中按日期过滤

[英]Filtering by dates in Google App Engine's Datastore

我在尝试按日期过滤一组对象时遇到一些问题。 现在,我可以像这样获得用户的所有交易:

> t = Transaction.all().filter("client_email =", "some_email").filter("application_id =", "foo").fetch(100)
> len(t)
# => 4

现在,如果我想设置一些日期过滤器:

> min = datetime.datetime(2009, 2, 3, 0, 0)
> max = datetime.datetime(2009, 11, 4, 0, 0)

> len(Transaction.gql("WHERE client_email =:1 AND date >:2 AND date <=:3 AND application_id =:4", 
                      "some_email", min, max, "foo").fetch(100))
# => 2

我知道所有这些交易的日期均<max &&> min:

> map(lambda x: x.date, t)
# => [datetime.datetime(2009, 10, 2, 22, 43, 51), datetime.datetime(2009, 10, 5, 2, 5, 24), datetime.datetime(2009, 10, 7, 16, 51, 5), datetime.datetime(2009, 10, 7, 16, 6, 53)]

是的,所有这些交易都是在2009年10月完成的。我用Python过滤了这些交易只是为了确认这是正确的:

> trans = filter(lambda x: x.date < max and x.date >= min, t)
> len(trans)
# => 4

是的,它们都具有正确的日期,但是由于我的查询中的某些内容,结果与预期结果不符,对查询中可能出什么问题的任何想法?

您是否尝试过使查询日期信息符合App Engine GQL语法 例如语法:

DATETIME(year, month, day, hour, minute, second)
DATETIME('YYYY-MM-DD HH:MM:SS')
DATE(year, month, day)
DATE('YYYY-MM-DD')
TIME(hour, minute, second)
TIME('HH:MM:SS')

尝试运行以下GQL:

"WHERE client_email =:1 AND date > DATE(:2) AND date <= DATE(:3) AND application_id =:4", "some_email", "2009-02-03", "2009-11-04", "foo"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM