如何使用bulkloader下载App Engine数据时从ReferenceProperty类获取属性?

时间:2010-12-21 00:15:59

标签: python google-app-engine bulkloader

我想下载我的App Engine数据,以便我可以在本地有效地操作(我正在基于它生成一些PDF)。 如何定义ReferenceProperty的列由引用模型的特定属性填充,而不仅仅是键或id?

以下是我的模型类:

class Department(db.Model):
   name = db.StringProperty()

class User(db.Model):
   userKey = db.StringProperty(required=True)
   secret = db.StringProperty()
   dept = db.ReferenceProperty(Department, required=True)

但是,即使我在bulkloader.yaml中描述了一个property_map,如下所示:

- kind: User
  connector: csv
  connector_options:
  property_map:
    - property: __key__
      external_name: key
      export_transform: transform.key_id_or_name_as_string

    - property: dept
      external_name: dept
      import_transform: transform.create_foreign_key('Department')
      export_transform: transform.key_id_or_name_as_string

    - property: secret
      external_name: secret

    - property: userKey
      external_name: userKey

我总是以CSV中的部门键结束

e.g。

   dept     secret    key
1184017  mySecret  myKey

如何定义dept列由Department模型的'name'属性填充?

e.g。

   dept     secret    key
myDept  mySecret  myKey

感谢, 保罗

1 个答案:

答案 0 :(得分:1)

创建文件uploadutil.py并在其中添加此方法:

def prop_converter(dept):
  # load the department then return the property you want
  return dept.name

然后在bulkloader.yaml中添加:

为uploadutil添加导入:

import: uploadutil

添加属性:

- property: dept
    external_name: dept
    import_transform: transform.create_foreign_key('Department')
    export_transform: uploadutil.prop_converter

因此在导出时调用上述方法!