Оптимизировать метод импорта с помощью Python - PullRequest
0 голосов
/ 27 января 2012

Для импорта мне нужно добавить огромное количество bId к экземпляру MyClassA

foos = json.loads(self.request.get('foos'))
for foo in foos  :
    a = MyClassA()
    a.id = foo["id"]
    a.name = foo["name"]
    for bId in foo["stringWithAllBidsForA"].split(";") :
                        tmp = B.gql("WHERE id = '"+bId +"'").get()
                        if tmp :
                            a.bList.append(tmp.key())
    a.put()

Я уверен, что это лениво, но как я могу оптимизировать этот код?

Я думаю добавить (indexed = True) в поле id для B и только для ключа для запроса B gql и поставить пакетное хранилище данных. Но я не знаю, как это сделать.

редактировать:

Я заменил b.id = bId by b = MyClassB(key_name= bId)

так что теперь я делаю:

a.bList.append( foo["stringWithAllBidsForA"].split(";"))

У меня проблема с кодированием при преобразовании str в ключ, который я пробовал с encoded= foo["stringWithAllBidsForA"].split(";")[0]

Что не так? невозможно декодировать> split> cast to key.

1 Ответ

1 голос
/ 27 января 2012

Если вы используете key_name=bId при сохранении экземпляра B вместо отдельного индексированного свойства id, вы сможете выполнить пакетное получение вместо запроса к хранилищу данных, используя Model.get_by_key_name

Model.get_by_key_name(list_of_b_ids)

Вы также можете выполнить пакетную операцию, используя db.put

db.put(list_of_a_models)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...