Skip to content Skip to sidebar Skip to footer

Uploading Data With Bulkloader

In short: how can I configure bulkloader to insert data into 2 models with references? I have a person and fruit class, with person linking to fruit: class Fruit(db.Model): na

Solution 1:

Sure.

The basic problem is that there's a step missing. You have a fruit name, what you want to store a reference to is a fruit key. You can accomplish this in a few ways.

If Banana or Apple is a permanent, unique identifier for a fruit, you can use transform.create_foreign_key('Fruit'). This will give you a fruit key where the fruit name is the key name. Persons will be uploaded pointing to Fruit entities which don't exist, which is fine. Just upload fruit using the same import transform on the __key__ property to create the corresponding entities.

If you don't want to use fruit name as the fruit key name, you'd need to do some more complex post-import processing. You can write a post_import_function that queries for fruit by name to see if a matching entity already exists, creates one if not, and then sets a reference to it on the newly created person entity.

Solution 2:

It is possible with a post_import_function.

In your model, do not import a foreign key. Instead, add a post_import_function that looks like:

def fkeyLocation(input_dict, entity_instance, bulkload_state):
   entity_instance.availableAt =  Location.all().filter('name = ',input_dict['availableAt']).get().key()

   return entity_instance

The trick is to do the lookup with the input_dict. If you're using polymodels, you can't use the auto-generated "kind" from the wizard, you have to use the model.modelName from the example code here.

Solution 3:

I didn't figure out how to do this cleanly so ended up just splitting my data into multiple files and pregenerating the ID's.

Post a Comment for "Uploading Data With Bulkloader"