2010-07-10 92 views
3

我有一個很大的CSV文件,大小約爲10 MB,其中包含需要在Google App Engine DataStore中導入的所有數據。 我嘗試了以下方法來執行導入,但所有時間都失敗了一半。將大塊數據一次性導入Google App Engine數據存儲區

  • 導入使用映射命令URL,然後執行URL,失敗,因爲請求超時......使用創建cron作業
  • 導入,但得到DeadlineExceededError ...使用remort_api_shell
  • 進口,但操作超時。

能否請你給我建議和計算策略(使用你能想象虛擬數據)怎麼辦呢......建議的代碼會更有幫助..

**我使用Python和谷歌的網頁應用程序框架來開發所述應用程序。

回答

4

您可以逐行發佈。使用內置散裝裝載機。

http://code.google.com/appengine/docs/python/tools/uploadingdata.html

這是一篇好文章。

這裏是我使用2年前的contactloader.py作爲參考。這是更復雜的,因爲我上次使用但仍然.....

import datetime 
from google.appengine.ext import db 
from google.appengine.tools import bulkloader 

class Contact(db.Model): 

    date = db.DateTimeProperty(auto_now_add=True) 

    owner = db.StringProperty() 

    companyname = db.StringProperty() 

    companyemail = db.EmailProperty() 

def myfunc(x): 
    temp = x.split(":mailto:") 
    if len(temp) > 0: 
     temp = temp[-1].split(":") 
    else: 
     return "defaultvalue" 
    if len(temp) > 0: 
     temp = temp[0] 
    else: 
     return "defaultvalue" 
    temp = temp.split("<1>")[0] 
    if temp is None or len(temp) < 5: 
     return "defaultvalue" 
    return temp 

def mysecfunc(x): 
    return x.split("<0>")[0] 

class ContactLoader(bulkloader.Loader): 
    def __init__(self): 
     bulkloader.Loader.__init__(self, 'Contact', 
            [ 
            ('companyname',mysecfunc), 
            ('owner', lambda x:"somevalue"), 
            ('companyemail',myfunc), 
            ("date",lambda x:datetime.datetime.now()), 
            ]) 

loaders = [ContactLoader] 
+0

讓我試試看,一旦完成,我會回到你身邊...... – 2010-07-10 07:25:22

相關問題