[英]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.