Почему мой запрос GQL не возвращает никаких результатов в моем приложении GAE? - PullRequest
1 голос
/ 05 ноября 2010

Я в основном следовал руководству о том, как создать gustbook, используя 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 ]

2 голосов
/ 05 ноября 2010

Возможно, есть и другой способ обойти это, но я думаю, что, поскольку ваше свойство when является датой и временем, вам лучше будет что-то вроде этого:

shouts = db.GqlQuery("""SELECT * 
                          FROM Shout 
                         WHERE when >= DATE('2010-11-05')
                           AND when < DATE('2010-11-06')""")
1 голос
/ 05 ноября 2010

Попробуйте это:

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')")
...