使用ProtoRPC的Message类传输对其他数据存储区实体的引用时,我应该使用str(key)
还是key.id()
。第一个是String,第二个是long。
到底有什么不同吗?有没有限制?
在过滤查询时,似乎会出现相同的结果。
由于
答案 0 :(得分:3)
这取决于您的目标是什么,以及您是否使用db
或nbd
。
如果您使用str(key)
,您将获得一个实体密钥,并且需要构建一个新密钥(在服务器上取决于该值)。使用ndb
,我建议使用key.urlsafe()
显式,然后ndb.Key(urlsafe=value)
创建新密钥。不幸的是,使用db
可以做的最好的事情是str(key)
和db.Key(string_value)
。
使用key.id()
还取决于ndb
或db
。如果您使用db
,您知道此值将是一个整数(并且key.name()
将是一个字符串)但如果您使用ndb
,则它可以是整数或字符串。在这种情况下,您应该使用key.integer_id()
或key.string_id()
。在任何一种情况下,如果将整数转换为字符串,则需要在检索实体或设置键之前手动转换回整数;例如MyModel.get_by_id(int(value))
如果我要提出推荐,我建议您明确说明您的ID,注意它们的分配方式,并在API中向用户提供这些不透明的值。如果您想让App Engine为您分配ID,请使用protorpc.messages.IntegerField
来表示这些ID,而不是强制转换为字符串。
此外,请从db
切换到ndb
,如果您还没有。