Отличия ключей download_data и upload_data в AppEngine

Согласно документации 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

Данные загружаются с одинаковыми идентификаторами, но ключи разные, есть идеи, что я делаю неправильно? Или ключи вычисляются по другому на локальном devappserver?

Обновить

Добавление некоторых данных для сравнения между рабочей версией и локальной версией для разработчиков.

Ключ производства: ag9zfmF3ZXNvbWVzdGdhbWVyGAsSCENhdGVnb3J5IgrYo9is2YbYqNmKDA

После загрузки_данных из PROD и загрузки_данных на локальный хост ключ превращается для того же объекта: ahFkZXZ-YXdlc29tZXN0Z2FtZXIYCxIIQ2F0ZWdvcnkiCtij2KzZhtio2YoM


person mkhatib    schedule 24.06.2013    source источник
comment
Было бы полезно, если бы вы показали некоторые данные, которые вы наблюдаете, и классы вашей модели.   -  person Guido van Rossum    schedule 24.06.2013


Ответы (1)


Вам нужно использовать соответствующие преобразования в конфигурации вашего массового загрузчика, например, если вы используете идентификаторы, то что-то вроде

- 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)
person crazystick    schedule 25.06.2013