2009-09-14 3 views
1

Я использовал загрузчик bulkloader.Loader для загрузки данных в GAE dev и в хранилище данных, но, как мне кажется, создавать объекты из данных, отличных от CSV, и вставлять их в хранилище данных.Загрузка данных GAE в хранилище данных без использования CSV

Так сказать, мой объект что-то вроде:

class CainEvent(db.Model): 
    name =db.StringProperty(required=True) 
    birthdate = db.DateProperty() 

Может кто-нибудь дать мне простой пример о том, как это сделать, пожалуйста?

+0

Как выглядят ваши входные данные? Вы просто говорите, что это не CSV. – geoffspear

ответ

2

Вот очень упрощенный пример того, что мы делаем, чтобы использовать bulkloader для загрузки данных в формате JSON вместо CSV данных:

class JSONLoader(bulkloader.Loader): 
    def generate_records(self, filename): 
     for item in json.load(open(filename)): 
      yield item['fields'] 

В этом примере, я предполагаю, что формат JSON, который выглядит как

[ 
    { 
     "fields": [ 
      "a", 
      "b", 
      "c", 
      "d" 
     ] 
    }, 
    { 
     "fields": [ 
      "e", 
      "f", 
      "g", 
      "h" 
     ] 
    } 
] 

который упрощен.

В принципе, все, что вам нужно сделать, это создать подкласс bulkloader.Loader и реализовать (как минимум) метод generate_records, который должен давать списки строк. Эта же стратегия будет работать для загрузки данных из файлов XML или файлов, зашифрованных ROT13, или любого другого.

Обратите внимание, что список строк, полученных при методе generate_records должны совпадать (в длину и порядка) с «Свойства» список вы предоставите при инициализации загрузчика (т.е. второй аргумент метода AlbumLoader.__init__ в this example) ,

Этот подход фактически обеспечивает большую гибкость: Мы переопределение метода __init__ на нашем JSONLoader реализации и автоматическое определение kind модели мы загружаем и список его свойств, чтобы обеспечить к bulkloader.Loader родительскому классу.

0

Вы можете найти this post полезный - он детализирует загрузку данных непосредственно со СХБД, но в равной степени относится к загрузке из любого другого источника.

Смежные вопросы