首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GoogleAppEngine上用“主键”查询数据库?

在GoogleAppEngine上用“主键”查询数据库?
EN

Stack Overflow用户
提问于 2011-02-23 00:26:10
回答 2查看 150关注 0票数 0

我使用Google (GAE)制作了一个留言簿应用程序:python正在iPhone上运行。

它有能力用昵称在黑板上写消息。

该实体有3份文件:

  1. nickname
  2. date
  3. message

我要做的另一个功能,用户可以张贴回复(或评论)在一条消息。

但要做到这一点,我认为应该有一个“主键”的留言簿实体,所以我可以把一些有关答复的信息在一条消息上。

有了这三个字段,我就不能只从数据库中得到一条消息。

我是数据库新手。数据库会自动保存某种索引吗?还是必须由用户来完成?

如果它是由数据库本身自动完成的(或者不是),那么我如何才能只得到一个带有密钥的实体呢?

我也想得到一些关于如何制作回复功能的建议。感谢阅读。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-23 00:31:13

每个实体都有钥匙。如果在创建实体时没有分配key_name,则键的一部分是自动分配的数字ID。除非另有指定,否则将自动对长文本字段以外的属性进行索引。

要获得一个实体,如果您知道密钥,您只需执行db.get(key)。对于答复,您可能希望在reply实体中使用一个db.ReferenceProperty来指向父消息;这将自动在消息中创建一个反向引用查询,以获取回复。

票数 1
EN

Stack Overflow用户

发布于 2011-02-23 01:51:05

每个实体都有一个键,它包含信息,例如它是什么类型的实体、它的名称空间、父实体,最重要的是一个唯一的标识符(可选用户可指定的)。

您可以使用所有实体所拥有的key方法获取实体的密钥。

代码语言:javascript
复制
message.key()

键可以转换为URL安全字符串,也可以从URL安全字符串转换.

代码语言:javascript
复制
message_key = str(message.key())
message = Message.get(message_key)

如果密钥具有用户指定的唯一标识符(密钥名),则可以这样访问它。

代码语言:javascript
复制
message.key().name()

或者,如果没有指定密钥名,则将自动分配id。

代码语言:javascript
复制
message.key().id()

若要将密钥名称分配给实体,必须在创建实体时指定它,之后无法添加/删除或更改密钥名称。

代码语言:javascript
复制
message = Message(key_name='someusefulstring', content='etc')
message.put()

然后,您将能够使用密钥名从数据存储中获取消息。

代码语言:javascript
复制
message = Message.get_by_key_name('someusefulstring')

使用db.ReferenceProperty存储对另一个实体的引用(可以是任何类型的)

尽可能使用密钥名是个好主意,因为从数据存储中获取密钥要快得多,因为它不涉及查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5085731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档