我再次
""" 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解析器没有抱怨它是一个字符串?
答案 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语法,则会更有帮助。