【问题标题】:download_data and upload_data keys differences in AppEngineAppEngine 中的 download_data 和 upload_data 键的区别
【发布时间】:2013-06-24 02:37:02
【问题描述】:

根据AppEngine documentation(引用如下),使用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 的密钥计算方式不同?

更新

添加一些数据来比较 prod 和本地 dev 版本

生产密钥:ag9zfmF3ZXNvbWVzdGdhbWVyGAsSCENhdGVnb3J5IgrYo9is2YbYqNmKDA

从 PROD 下载数据并将数据上传到 localhost 后,同一对象的密钥变为:ahFkZXZ-YXdlc29tZXN0Z2FtZXIYCxIIQ2F0ZWdvcnkiCtij2KzZhtio2YoM

【问题讨论】:

  • 如果你展示一些你观察到的数据和你的模型类,这会有所帮助。

标签: google-app-engine google-cloud-datastore app-engine-ndb


【解决方案1】:

您需要在批量加载程序配置中使用适当的转换,例如,如果您使用的是 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2011-09-16
    • 2011-05-17
    相关资源
    最近更新 更多