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

Zey*_*nel 0 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))
Run Code Online (Sandbox Code Playgroud)

更新

如果我使用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))
Run Code Online (Sandbox Code Playgroud)

你能解释为什么上面的工作和原始代码get()不起作用吗?

dfi*_*ter 5

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

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

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