2010-11-05 36 views
1

我主要關注瞭如何使用GAE和Python構建gustbook的教程。現在我只想顯示從某一天的條目,但GQL查詢不返回任何東西(雖然有從那天項):爲什麼我的GQL查詢不會在我的GAE應用程序中返回任何結果?

class Shout(db.Model): 
    message= db.StringProperty(required=True) 
    when = db.DateTimeProperty(auto_now_add=True) 
    who = db.StringProperty() 

class MainHandler(webapp.RequestHandler): 
    def get(self): 
     shouts = db.GqlQuery("SELECT * FROM Shout WHERE when=DATE('2010-11-05')") 
     # Return something without the WHERE clause 
     values = {'shouts':shouts} 
     self.response.out.write(template.render('main.html',values)) 

    def post(self): 
     self.response.out.write("posted") 
     shout = Shout(message=self.request.get("message"),who=self.request.get("who")) 
     shout.put() 

這是我的main.html中:

<form method="post"> 
    <input type="text" name="who"></input> 
    <input type="text" name="message"></input> 
    <input type="submit" value="Send"> </input> 
</form> 

{% for shout in shouts %} 
    <div>{{shout.message}} from {{shout.who}} on {{shout.when}}</div> 
{% endfor %} 

回答

2

附近可能有這樣一種說法,但我認爲這是因爲你的when屬性是日期時間,你會得到更好的服務與這樣的事情:

shouts = db.GqlQuery("""SELECT * 
          FROM Shout 
         WHERE when >= DATE('2010-11-05') 
          AND when < DATE('2010-11-06')""") 
+2

+1。或者,您可以將DateProperty添加到模型中,然後使用相等過濾器來查詢。這會佔用更多的空間,但會更容易查詢(等於二等關係運算符 - 特別重要,因爲您只能在一個字段上使用關係運算符)。 – 2010-11-05 20:01:38

+0

謝謝你補充說,大衛。 – bernie 2010-11-05 20:03:27

+0

謝謝,它現在正在工作。是否因爲一些「四捨五入」的問題,我不能只使用'='? – weiqure 2010-11-05 20:11:27

1

試試這個:

shouts = db.GqlQuery("SELECT * FROM Shout WHERE when=DATE('2010-11-05')").fetch(5000) 

雖然可以使用Query對象視爲可迭代,這是一個更好的主意,明確地獲取行,而不是依賴於for在您的模板做工作。我懷疑它不是這樣支持的。

編輯: 現在我更仔細地看看這個,我懷疑問題是你要查詢的字段是DateTimeProperty,並且通過使用DATE運算符,你基本上說你想要2010-11 -05 00:00:00,並有與確切日期和時間沒有記錄,那麼試試這個來代替:

shouts = db.GqlQuery("SELECT * FROM Shout WHERE when >= DATETIME('2010-11-05 00:00:00') and when <= DATETIME('2010-11-05 23:59:59')") 
+0

和以前一樣的問題。我認爲抓取並不是必需的,因爲它沒有在示例應用程序中使用(例如http://code.google.com/p/google-app-engine-samples/source/browse/trunk/guestbook/index.html) 。 – weiqure 2010-11-05 19:52:07

+0

我同意顯式提取行是一個更好的辦法 - 一次檢索所有行會更有效(迭代器以區塊形式檢索它們,這會導致數據存儲的額外往返)。但是,使模板迭代查詢對象沒有問題 - 它的工作原理就好像您使用常規for循環遍歷它一樣。 – 2010-11-05 19:52:39

+2

我並非試圖說服指責:當某人明確試圖提供幫助時,我不喜歡看到貶低言論。亞當,謝謝你的回答。 – bernie 2010-11-05 20:02:36

相關問題