Почему в запросе отображаются все буквы первого совпадения? - PullRequest
0 голосов
/ 20 февраля 2011

В Owner У меня есть свойства "owner" и "owner_tag".

Я запрашиваю owner, а затем пытаюсь напечатать owner_tag для сопоставления результатов.Но я получаю каждую букву первого совпадения owner_tag:

Итак, в Owner

владелец: az@example.com имеет owner_tag: tag1, tag2, tag3.

Запрос соответствует "tag1" и проходит по "t", "a", "g", "1".Я не понимаю, почему?

Вот код:

query = Owner.all()
query.filter("owner", user)
w = query.get()

for tag in w.owner_tag:
    self.response.out.write("""
    %s, %s""" %
    (tag, w.tag_value))

Обновление

Если я использую fetch() вместо get() тогда это работает.Но так как я не знаю количество элементов для извлечения, как я могу получить их все без указания числа.Я думал, что get() выбрал все соответствующие элементы:

query = Owner.all()
query.filter("owner", user)
w = query.fetch(10)

for tag in w:
    self.response.out.write("""
    %s, %s""" %
    (tag.owner_tag, tag.tag_value))

Можете ли вы объяснить, почему вышеприведенный код работает, а оригинальный код с get() не работает?

1 Ответ

5 голосов
/ 20 февраля 2011

get() всегда возвращает один результат или None, и когда вы перебираете одну строку, каждое значение является символом. fetch() работает так, как вы думаете, с необязательным аргументом offset, так что вы можете просматривать результаты, если хотите.

fetch() имеет смысл, если есть потенциально тонны результатов, которые вы, возможно, не захотите платить за извлечение, или если вы хотите получить определенное количество результатов за одну поездку в хранилище данных.

Если вы хотите получить все результаты и не против оставить их на усмотрение, чтобы решить, во сколько обходов их извлечь, вы можете просто выполнить итерацию по запросу: for tag in query.filter("owner", user).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...