2010-07-10 107 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

相关问题