在Python中将实体键序列化为字符串以用于GAE

5 投票
4 回答
1682 浏览
提问于 2025-04-16 16:36

在Java的底层API中,有一种方法可以把一个实体的键转换成字符串,这样你就可以通过JSON把它传给客户端。如果你想知道在Python中有没有类似的方法?

4 个回答

2

更好:

string_key = entity.key().urlsafe()

然后你可以用下面的方式解码这个密钥:

key = ndb.Key(urlsafe=string_key)
3

str(entity.key()) 这个代码会返回一个用 base64 编码的键的表示方式。

entity.key().name() 或者 entity.key().id() 这两个代码会分别返回键的名字或ID,不会包含类型和祖先信息。

3

根据你是否使用键名,你可以用 obj.key().name() 来获取键名,或者用 obj.key().id() 来获取ID。不过,这两者都不包含实体类的名称,所以不能单独用来从数据存储中找回原始对象。其实,在大多数情况下,你在处理这些对象时通常已经知道实体的种类,所以这不是个大问题。

有一个通用的解决方案,可以在有键名和没有键名的情况下都能用,那就是 obj.key().id_or_name()。这样你就可以像下面这样找回原始对象:

from google.appengine.ext import db
#...
obj_key = db.Key.from_path('EntityClass', id_or_name)
obj = db.get(obj_key)

如果你不介意传递那个长长的、看起来复杂的字符串(里面还包含一些额外的数据,比如你的GAE应用的名称),你可以使用键的字符串表示形式(str(obj.key())),然后直接把它传给 db.get 来获取对象。

撰写回答