为什么我的GAE应用中的GQL查询不返回结果?
我大致上按照一个教程学习如何用GAE和Python制作一个留言簿。现在我只想显示某一天的留言,但GQL查询没有返回任何结果(尽管那一天确实有留言):
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 个回答
1
试试这个:
shouts = db.GqlQuery("SELECT * FROM Shout WHERE when=DATE('2010-11-05')").fetch(5000)
虽然可以把查询对象当作一个可遍历的对象来用,但更好的做法是明确地获取数据行,而不是依赖模板中的for
来处理。我怀疑这样做可能不被支持。
补充说明:
现在仔细看看,我怀疑问题出在你查询的字段是一个日期时间属性。使用日期操作符时,你实际上是在说你想要的是2010年11月5日 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')")
2
可能还有其他解决办法,但我觉得因为你的 when
属性是一个日期时间类型,使用下面这样的方式会更合适:
shouts = db.GqlQuery("""SELECT *
FROM Shout
WHERE when >= DATE('2010-11-05')
AND when < DATE('2010-11-06')""")