2

根据AppEngine 文档(引用如下),使用 download_data 和 upload_data 应该保留下载数据的原始密钥。

下载数据时,实体与其原始密钥一起存储。上传数据时,使用原始密钥。如果数据存储中存在与正在上传的实体具有相同键的实体,则替换数据存储中的实体。

我正在使用这两个命令:

appcfg.py download_data --oauth2 --url=https://myapp-id.appspot.com/_ah/remote_api --filename=testdata/gamedata

appcfg.py upload_data --url=http://localhost:9876/_ah/remote_api  --filename=testdata/gamedata

数据以相同的 id 上传,但密钥不同,知道我做错了什么吗?还是本地 devappserver 的密钥计算方式不同?

更新

添加一些数据以比较产品和本地开发版本

生产密钥:ag9zfmF3ZXNvbWVzdGdhbWVyGAsSCENhdGVnb3J5IgrYo9is2YbYqNmKDA

在从 PROD 下载数据和上传数据到 localhost 之后,该密钥变为同一对象:ahFkZXZ-YXdlc29tZXN0Z2FtZXIYCxIIQ2F0ZWdvcnkiCtij2KzZhtio2YoM

4

1 回答 1

2

您需要在 bulkloader 配置中使用适当的转换,例如,如果您使用的是 id,那么类似

- kind: YourEntity
  connector: csv
  property_map:
    - property: __key__
      external_name: key
      export_transform: transform.key_id_or_name_as_string
      import_transform: transform.none_if_empty(transform.create_foreign_key('YourEntity', key_is_id=True))

    - property: more props...

会在进出的路上变换钥匙。

如果您与父母有实体,那么您需要在退出时拆分并在进入时重新组合:

- kind: ChildEntity
  connector: csv

  property_map:
    - property: __key__
      external_name: childKey
      import_transform: transform.create_deep_key(('ParentEntity', 'parentKey', True),('ChildEntity', transform.CURRENT_PROPERTY, True))

      export:
        - external_name: parentKey
          export_transform: transform.key_id_or_name_as_string_n(0)

        - external_name: childKey
          export_transform: transform.key_id_or_name_as_string_n(1)
于 2013-06-25T18:20:38.160 回答