2014-02-05 2 views
0

Кажется, очень мало информации об загрузке объектов с родительскими ключами с помощью bulkloader для App Engine. Я пытался следуя инструкциям, которые я нашел здесь на StackOverflow ...Объемный загрузчик App Engine - загрузка объектов с родительскими ключами?

Uploading Entity with Parent Using Bulkloader

Но должно быть что-то я до сих пор не получаю. Я надеялся, что вы все сможете помочь.

Я пытаюсь загрузить новые объекты и предоставить им родительский ключ объекта в уже существующем хранилище данных. Родительская сущность - это, по сути, сущность «Admin». Я хочу, чтобы все объекты «Car», принадлежащие администратору, имели этот родительский ключ. Таким образом, я могу легко найти только те автомобили.

admin.yml и admin.csv следующим образом ... (я пропущу преамбулу & "трансформаторы")

ADMIN.YML

- kind: Admin 
     connector: csv 

     property_map: 

      - property: __key__ 
       external_name: adminKey 
       export_transform: transform.key_id_or_name_as_string 

      - property: email 
       external_name: email 

ADMIN.CSV

email 
    [email protected] 

Это прекрасно работает. Создается единый объект администратора.

Теперь я хочу использовать эту сущность в качестве родителя объектов «Автомобиль», которые я загружаю дальше. car.yml и car.csv ниже ... (снова пропуская преамбулу & "трансформаторы")

CAR.YML

- kind: Car 
     connector: csv 

     property_map: 

      - property: __key__ 
       external_name: carKey 
       import_transform: transform.create_deep_key(('adminKey', 'adminKey'),('carKey', transform.CURRENT_PROPERTY)) 

       export: 
       - external_name: adminKey 
       export_transform: transform.key_id_or_name_as_string_n(0) 
       - external_name: carKey 
       export_transform: transform.key_id_or_name_as_string_n(1) 

      - property: manufacturer 
       external_name: manufacturer 

      - property: model 
       external_name: model 

CAR.CSV

manufacturer,model 
    Chevrolet,Impala 
    Ford,Focus 

Каждый раз, Я запускаю car.yml с car.csv, я получаю сообщение:

[ERROR] Ошибка в WorkerThread-0: 'adminKey'

Я просто потерялся в этом пункте. Проводки, скорее всего, не помогут. Я, наверное, видел их всех и все еще не могу понять.

Заранее спасибо.

+0

привет, какое решение? –

ответ

1

Правильный синтаксис transform.create_deep_key((kind, value),(kind, value),...)

Вам нужно что-то вроде этого:

transform.create_deep_key(('Admin', 'adminKey'),('Car', transform.CURRENT_PROPERTY)) 
          ^  ^  ^   ^
         parent kind parent val child kind  child val 

, а затем вам нужно будет добавить adminKey в файл car.csv - ваш экспорт выглядит как было бы создать правильный csv для экспорта существующих объектов, но для импорта новых объектов вам нужно будет добавить этот столбец вручную.

+0

Итак, когда вы говорите «вам нужно добавить adminKey в файл car.csv», вы имеете в виду, что мне нужно скопировать/вставить фактическое значение ключа объекта Admin из хранилища данных в CSV? Я был в предположении, что он будет использовать Entity (Admin) и найти/использовать Key, поскольку он выполнял импорт.По-видимому, это неверно? – edcincy

+0

Хорошо, я в принципе понял это. Большое спасибо за помощь. Мне нужно положить ключи для BOTH «adminKey» и «carKey» в файл CSV. Но это заставляет меня придумать свои собственные ключи для автомобилей. Я предпочел бы, чтобы Datastore создавал для меня ключи. Есть ли способ разрешить хранилищу создавать «carKey» автоматически при массовой загрузке и связывать его с родителем? – edcincy

+0

Если у вас есть пробел, он должен сгенерировать ключи. Я не тестировал это для импорта родительского и дочернего, но вы можете попробовать 'transform.create_deep_key (('Admin', 'adminKey'), ('Car', transform.CURRENT_PROPERTY, key_is_id = True))' и оставить столбец carKey пусто или попробуйте использовать 'transform.none_if_empty', хотя это, возможно, уже было проверено, см. [этот вопрос] (http://stackoverflow.com/questions/11873895/how-can-i-use-none-if-empty- с-create-deep-key) – crazystick