1

使用 ProtoRPC 中的 Message 类传输对其他 Datastore 实体的引用时,我应该使用str(key)or吗key.id()?第一个是字符串,第二个是长字符串。

最后有什么不同吗?有什么限制吗?

似乎在过滤查询时,会得出相同的结果。

谢谢

4

1 回答 1

3

这取决于您的目标是什么以及您是否使用dbnbd.

如果您使用str(key),您将获得一个实体键,并且需要构造一个新键(在服务器上取决于该值)。使用ndb,我建议使用key.urlsafe()明确然后ndb.Key(urlsafe=value)创建新密钥。不幸的是,你能做的最好的事情dbstr(key)and db.Key(string_value)

使用key.id()也取决于ndbor db。如果您正在使用db,您知道该值将是一个整数(这key.name()将是一个字符串),但如果您正在使用ndb它,它可能是一个整数或一个字符串。在这种情况下,您应该使用key.integer_id()or key.string_id()。无论哪种情况,如果将整数转换为字符串,则需要在检索实体或设置键之前手动转换回整数;例如MyModel.get_by_id(int(value))

如果我要提出建议,我会建议您明确说明您的 ID,注意它们的分配方式,并在 API 中将这些不透明的值提供给用户。如果您想让 App Engine 为您分配用于protorpc.messages.IntegerField表示这些的 ID,而不是转换为字符串。

另外,如果您还没有,从 切换db到。ndb

于 2013-05-08T20:49:44.687 回答