将CSV上传到GAE数据存储区

时间:2012-06-23 20:07:45

标签: google-app-engine csv google-cloud-datastore export-to-csv

我正在使用GAE的高复制数据存储区。我之前使用以下命令在csv中下载了一个表:

appcfg.py download_data --application=<your_app_id> --kind=<kind> --url=http://your_app_id.appspot.com/[remote_api_path] --filename=<data-filename>

现在我对该CSV文件进行了一些修改,我想上传它来替换在线数据。所以我用过这个:

appcfg.py upload_data --config_file=bulkloader.yaml --filename=<data-filename> --kind=<kind> --url=http://your_app_id.appspot.com/[remote_api_path]

这成功上传了数据,但问题是现在所有新上传的密钥(包括引用)都是这样的:name=99764而不是id=99764

GAE没有意识到两者都是一回事,所以它没有取代那些,它增加了新的。但现在这些参考资料已被打破。

bulkloader.yaml中,我有这个:

- kind: Kind
  connector: csv
  connector_options:
    # TODO: Add connector options here--these are specific to each connector.
  property_map:
    - property: __key__
      external_name: key
      export_transform: transform.key_id_or_name_as_string

这部分是:transform.key_id_or_name_as_string导致问题吗?如果是的话,我该如何解决?

1 个答案:

答案 0 :(得分:2)

我不确定,但也许这可以帮到你。我仅将此用于 link 一个ReferenceProperty,而不是用于替换数据

- property: __key__
      external_name: key
      import_transform: transform.create_foreign_key('key', key_is_id=True)
      export_transform: transform.key_id_or_name_as_string

编辑:

- property: category
  external_name: category
  import_transform: transform.create_foreign_key('Category', key_is_id=True)

大写的“类别”是从属性“类别”引用的模型。在csv文件中,我有一个类似'123456'的字符串,在数据存储区中,Category Kind的ID是'123456'。通过这种方式,GAE将referenceproperty与相关Kind相关联,否则它将是一个简单的字符串。现在在你的情况下是不同的,因为你使用Key替换数据,我没有这方面的经验。