为什么查询会显示第一个匹配的每个字母?

时间:2011-02-20 16:59:25

标签: python google-app-engine

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 个答案:

答案 0 :(得分:5)

get()始终返回单个结果或None,当您迭代单个字符串时,每个值都是一个字符。 fetch()以您的思维方式工作,使用可选的offset参数,以便您可以根据需要翻译结果。

fetch()是否有意义,如果您可能不想为检索支付大量结果,或者您希望在一次访问数据存储区时获得特定数量的结果。

如果您想要所有结果并且不介意将其留给appengine来决定要检索它们的往返次数,您可以迭代查询:for tag in query.filter("owner", user)