2012-01-27 95 views
0

的導入方法對於進口我需要一個龐大的投標量添加到MyClassA實例優化與Python

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() 

我肯定這是懶惰的,但如何優化代碼。

我正在考慮在B的id字段中添加(indexed = True),並且僅爲B gql查詢和批處理數據存儲放置鍵。 但我不知道該怎麼做。

編輯:

我更換b.id = bId by b = MyClassB(key_name= bId)

所以現在我做:

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

我得到的編碼probleme轉化海峽到鍵入我試圖 與encoded= foo["stringWithAllBidsForA"].split(";")[0]

怎麼啦?不可能解碼>拆分>轉換爲鍵。

回答

1

如果存儲B實例時,而不是一個單獨的id索引屬性使用key_name=bId,你應該能夠做到批量獲得使用Model.get_by_key_name

Model.get_by_key_name(list_of_b_ids) 

你也可以批量投入運營數據存儲區查詢,而不是使用db.put

db.put(list_of_a_models) 
+0

是Model.get_by_key_name(list_of_b_ids)與鍵唯一兼容,應如何調用它? – 2012-01-27 13:56:48

+0

'get_by_key_name'接受一個鍵名列表,它相當於一個特定實體類的'db.get'。 – proppy 2012-01-27 14:01:17

+0

您確定只獲取關鍵名稱,因爲它在文檔中寫有:「獲取給定關鍵字名稱(或多個名稱)的模型實例(或多個實例)」 – 2012-01-27 14:10:38