根据google appengine中的__key __(唯一标识符)进行选择

时间:2009-09-14 03:10:29

标签: python google-app-engine

我再次


""" A site message """
class Message( db.Model ) :
  # from/to/ a few other fields
  subject = db.StringProperty()
  body = db.Text()

  sent = db.DateTimeProperty( auto_now_add=True )

现在我正在尝试通过其KEY选择一条消息。我之前保存了密钥,并以HTML格式将其植入。结果是一个类似于

的可点击链接
<a href="/readmessage?key=aght52oobW1hZHIOCxIHTWVzc2FnZRiyAQw">click to open</a>

然后我运行这个GQL查询:

gql = """select * from Message where __key__='aght52oobW1hZHIOCxIHTWVzc2FnZRiyAQw'"""

但它没有用,因为

BadFilterError:BadFilterError:无效过滤器:__ key__过滤器值必须是Key;收到了aght52oobW1hZHIOCxIHTWVzc2FnZRiyAQw(一个str)。

我在这里完全遗漏了一些东西,那就是如何将对象放入GQL查询字符串中......而且Gql解析器没有抱怨它是一个字符串?

2 个答案:

答案 0 :(得分:6)

不要打扰GQL进行基于密钥的检索 - 从字符串中创建一个关键对象:

k = db.Key('aght52oobW1hZHIOCxIHTWVzc2FnZRiyAQw')

只是db.get(k)。如果你坚持使用GQL,那么k - 一个适当构造的db.Key实例, NOT 一个字符串对象! - ) - 也是你需要替代的进入GQL查询(:1或者什么)。

答案 1 :(得分:1)

您还可以通过构建“an entity key literal, with...a complete path of kinds and key names/IDs”手动构建查询。

SELECT * FROM Message WHERE __key__ = KEY('Message', 'message_key')

如果您使用的是数据存储查看器/资源管理器,并且无法使用Python语法,则会更有帮助。