1

我主要关注的是关于如何使用 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 %}
4

2 回答 2

2

可能有另一种解决方法,但我认为因为您的when属性是一个日期时间,所以您最好使用以下内容:

shouts = db.GqlQuery("""SELECT * 
                          FROM Shout 
                         WHERE when >= DATE('2010-11-05')
                           AND when < DATE('2010-11-06')""")
于 2010-11-05T19:56:32.510 回答
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')")
于 2010-11-05T19:33:22.427 回答