使用 ProtoRPC 中的 Message 类传输对其他 Datastore 实体的引用时,我应该使用str(key)
or吗key.id()
?第一个是字符串,第二个是长字符串。
最后有什么不同吗?有什么限制吗?
似乎在过滤查询时,会得出相同的结果。
谢谢
使用 ProtoRPC 中的 Message 类传输对其他 Datastore 实体的引用时,我应该使用str(key)
or吗key.id()
?第一个是字符串,第二个是长字符串。
最后有什么不同吗?有什么限制吗?
似乎在过滤查询时,会得出相同的结果。
谢谢
这取决于您的目标是什么以及您是否使用db
或nbd
.
如果您使用str(key)
,您将获得一个实体键,并且需要构造一个新键(在服务器上取决于该值)。使用ndb
,我建议使用key.urlsafe()
明确然后ndb.Key(urlsafe=value)
创建新密钥。不幸的是,你能做的最好的事情db
是str(key)
and db.Key(string_value)
。
使用key.id()
也取决于ndb
or 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