我使用Google App Engine(GAE)制作了留言簿应用程序:python,客户端正在iPhone上运行。
它有能力用昵称在电路板上写信息 该实体有3个文件:
我即将发布另一项功能,即用户可以在邮件上发布回复(或评论)。
但要做到这一点,我认为留言簿实体应该有一个“主键”,所以我可以在消息上放置一些有关回复的信息。
通过这三个字段,我无法从数据库中获取一条消息。
我是数据库的新手。数据库是否自动保存某种索引?还是必须由用户完成?
如果它是由数据库本身自动完成的(或不是),我如何才能获得一个带有密钥的实体?
我想知道一般如何制作回复功能。感谢阅读。
答案 0 :(得分:1)
每个实体都有一把钥匙。如果在创建实体时未分配key_name,则密钥的一部分是自动分配的数字ID。除非您另行指定,否则除长文本字段以外的属性将自动编入索引。
如果您知道密钥,要获取实体,只需执行db.get(key)
即可。对于回复,您可能希望在回复实体中使用db.ReferenceProperty
来指向父消息;这将自动在消息中创建一个反向引用查询以获得回复。
答案 1 :(得分:1)
每个实体都有一个密钥,它包含诸如实体类型,命名空间,父实体以及最重要的唯一标识符(可选择用户可指定)等信息。
您可以使用所有实体拥有的key
方法获取实体的密钥。
message.key()
可以将密钥转换为URL安全字符串。
message_key = str(message.key())
message = Message.get(message_key)
如果密钥具有用户指定的唯一标识符(密钥名称),则可以像这样访问它
message.key().name()
或者,如果未指定密钥名称,则会自动分配ID。
message.key().id()
要为实体指定密钥名称,您必须在创建实体时指定该名称,之后无法添加/删除或更改密钥名称。
message = Message(key_name='someusefulstring', content='etc')
message.put()
然后,您将能够使用密钥名称
从数据存储区中获取消息message = Message.get_by_key_name('someusefulstring')
使用db.ReferenceProperty存储对另一个实体的引用(可以是任何类型)
尽可能使用密钥名称是个好主意,因为从数据存储中获取使用它们要快得多,因为它不涉及查询。