在此页面中:https://developers.google.com/appengine/docs/python/datastore/keyclass#Key_from_path
这部分:
Key.from_path(kind,id_or_name,parent = none,namespace = None,** kwds) 从一个或多个实体键的祖先路径构建新的Key对象。
路径表示实体的父子关系的层次结构。路径中的每个实体都表示实体的种类,以及其数字ID或其密钥名称。完整路径表示路径中最后出现的实体,其祖先(父项)作为前面的实体。
例如,以下调用为类型为Address的实体创建一个键,其数字ID为9876,其父级是具有指定键'Boris'的用户类型的实体:
k = Key.from_path('用户','鲍里斯','地址',9876)
有关路径的详细信息,请参阅键和实体组。
函数调用和解释在这里没有意义,如果Address是“亲切”参数,它应该先行吗? ID 9876应该排在第二位吗?为什么他们是第3和第4? 并且“parent”是第三个参数,为什么这里有两个“父”参数(类型'User'和名称'Boris'),它们是参数列表中的第一个和第二个参数?
答案 0 :(得分:2)
AppEngine中的键是分层的,用于获取传递所有祖先信息所需的完整密钥。
在示例的情况下,有两种对象类型:User和Address,User是Address的父对象。 对from_path的调用首先提供了对象类型User,其id为Boris(id可以是字符串名称或整数id),该对象具有Address类型的子对象,其id为9876。
答案 1 :(得分:2)
从Gae source code开始,from_path
类的Key
静态方法的签名是:
def from_path(*args, **kwds):
以(kind, id or name, kind, id or name, etc. etc.)
:
if not args or len(args) % 2:
raise datastore_errors.BadArgumentError(
'A non-zero even number of positional arguments is required '
'(kind, id or name, kind, id or name, ...); received %s' % repr(args))
如文档中所述,完整路径表示路径中最后出现的实体,其祖先(父项)作为前面的实体。
所以这个例子似乎是正确的;创建的密钥是种地址的实体的密钥,id
9876的父亲为种用户为'Boris'为key name
。