我主要关注如何使用GAE和Python构建gustbook的教程。现在我只想显示特定日期的条目,但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 %}
答案 0 :(得分:2)
可能还有另外一种解决方法,但我认为因为你的when
属性是一个日期时间,你可以用这样的方式得到更好的服务:
shouts = db.GqlQuery("""SELECT *
FROM Shout
WHERE when >= DATE('2010-11-05')
AND when < DATE('2010-11-06')""")
答案 1 :(得分: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')")