Почему этот Gql Query возвращает None?(Использование Python и App Engine) - PullRequest
3 голосов
/ 17 августа 2011

Я создаю игру с угадыванием чисел, чтобы научиться пользоваться Google App Engine.Я храню текущий ответ как случайное число в хранилище данных.Каждый раз, когда пользователь догадывается, я хочу вытащить ответ в GqlQuery и сравнить с предположением пользователей.Когда я использую GqlQuery для получения ответа, он возвращает «Нет», и я не знаю, почему или что изменить, чтобы получить случайное число вместо этого.

Здесь я храню ответ -

class Answer(db.Model):
    ans = db.IntegerProperty()

Вот как я сохраняю случайное число, когда пользователь создает новую игру -

thisanswer =(random.randint(1, 100))
answer = Answer(ans = thisanswer)
answer.put()

И я пытаюсь получить ответ, когда пользователь отправляет предположение, чтобы я мог сравнить сих предположение вот так -

q = db.GqlQuery("SELECT * FROM Answer")
q = q.fetch(1)
for p in q:
    answer = p.ans

Так что, когда я пытаюсь

if guess > answer:
    msg = "Too high!"
elif guess < answer:
    msg = "Too low!"

и т. д.Я получаю сообщение "Слишком высоко!"каждый раз.Поэтому я изменил "Слишком высоко!"msg to this-

msg = "Too high! " + str(answer)

и что я получаю -

«Слишком высоко! Нет»

Почему этот код возвращает значение «Нет»?Что вы рекомендуете изменить, чтобы получить случайное число, которое я ожидаю получить.Я следил за документами App Engine Python для хранилища данных, но, очевидно, я что-то упускаю.Спасибо за понимание этого вопроса.

1 Ответ

2 голосов
/ 17 августа 2011

Возможно, в базе данных нет ответов.Проверьте это с помощью:

msg = "Total answers in database: " + str(Answer.all().count())

Более элегантный способ получить первый ответ в базе данных будет:

answer = Answer.all().get()
# or (equivalent)
answer = db.GqlQuery("SELECT * FROM Answer").get()

if answer is not None:
  number = answer.ans
else:
  number = None
...