Warum nicht mein GQL Abfrage keine Ergebnisse in meiner GAE App zurückkehren?
-
29-09-2019 - |
Frage
Ich habe folgte meist ein Tutorial, wie man ein gustbook mit GAE und Python zu bauen. Jetzt möchte ich nur die Einträge aus einem bestimmten Tag zeigen, aber die GQL Abfrage gibt nichts zurück (obwohl es Einträge von diesem Tag):
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()
Das ist mein 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 %}
Lösung
Es könnte ein weiterer Weg, um dieses, aber ich denke, dass, weil Ihr when
Eigenschaft ist ein Datetime Sie würde besser mit so etwas wie dies serviert werden:
shouts = db.GqlQuery("""SELECT *
FROM Shout
WHERE when >= DATE('2010-11-05')
AND when < DATE('2010-11-06')""")
Andere Tipps
Versuchen Sie diese:
shouts = db.GqlQuery("SELECT * FROM Shout WHERE when=DATE('2010-11-05')").fetch(5000)
Es ist zwar möglich, ein Abfrage-Objekt als iterable zu verwenden, ist es eine bessere Idee, um explizit die Zeilen zu holen und hängt nicht von der for
in Ihrer Vorlage die Arbeit zu tun. Ich vermute, dass es nicht auf diese Weise unterstützt wird.
EDIT: Nun, da ich genauen Blick auf diese, wie ich vermute, dass das Problem ist, dass das Feld, das Sie abfragen auf ein DateTimeProperty ist, und durch den DATE-Operator, Sie sind im Wesentlichen sagen, dass Sie wollen 2010-11-05 00.00.00 , und es gibt keine Datensätze mit genau diesem Datum und Zeit, versuchen Sie so diese statt:
shouts = db.GqlQuery("SELECT * FROM Shout WHERE when >= DATETIME('2010-11-05 00:00:00') and when <= DATETIME('2010-11-05 23:59:59')")