如何在Python中解码Google App Engine实体键路径字符串?

6 投票
2 回答
2395 浏览
提问于 2025-04-16 00:38

在谷歌的应用引擎中,每个实体都有一个键(Key)。这个键可以通过一个路径生成,这样的话,键的字符串表示就是一个看起来很复杂的十六进制字符串。举个例子:

from google.appengine.ext import db
foo = db.Key.from_path(u'foo', u'bar', _app=u'baz')
print foo

这样就会得到

agNiYXpyDAsSA2ZvbyIDYmFyDA

前提是你设置了正确的路径来运行这段代码。

那么,如何从这个十六进制字符串中找回路径呢?我原以为答案会在Key或者实体组的文档里,但我没有找到。

2 个回答

2

一旦你有了Key对象(这个对象可以通过把那个不透明的标识符传给构造函数来创建),你可以使用Key.to_path()来获取这个Key的路径,结果会是一个列表。比如:

from google.appengine.ext import db
opaque_id = 'agNiYXpyDAsSA2ZvbyIDYmFyDA'
path = db.Key(opaque_id).to_path()
7
from google.appengine.ext import db

k = db.Key('agNiYXpyDAsSA2ZvbyIDYmFyDA')
_app = k.app()
path = []
while k is not None:
  path.append(k.id_or_name())
  path.append(k.kind())
  k = k.parent()
path.reverse()
print 'app=%r, path=%r' % (_app, path)

在开发控制台运行时,这会输出:

app=u'baz', path=[u'foo', u'bar']

正如要求的那样。一个更简短的替代方法是使用(不幸的是,我认为没有文档说明的)to_path方法,这个方法是Key实例的一部分:

k = db.Key('agNiYXpyDAsSA2ZvbyIDYmFyDA')
_app = k.app()
path = k.to_path()
print 'app=%r, path=%r' % (_app, path)

结果是一样的。但是第一个更长的版本只依赖于有文档说明的方法。

撰写回答