Key.from_path:在app引擎数据存储区文档中混淆python代码

时间:2012-05-20 13:09:13

标签: python google-app-engine

在此页面中: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'),它们是参数列表中的第一个和第二个参数?

2 个答案:

答案 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