2009年11月19日 星期四

Google App Engine(GAE) - 利用Remote api上傳大量資料到DataStore

1. 安裝Google App Engine(Python) 目前只有python版本支援Remote api。

2. 安裝Python 2.5,目前Google App Engine只支援到2.5版。

3. 建立app.yaml檔。

application: app-name #你的app名稱
version: 2 #你的app版本
runtime: python
api_version: 1

handlers:

- url: /remote_api

script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
login: admin


4. 上傳此app.yaml檔到你的App Engine。(youdir是存放app.yaml的目錄)
    C:\Program Files\Google\google_appengine\appcfg.py update yourdir/

5. 撰寫上傳資料的程式。
from google.appengine.ext import db
from google.appengine.tools import bulkloader

class PersonData(db.Model): #PersonData為kind Name()
    id = db.StringProperty()
    age = db.StringProperty()
    name = db.StringProperty()
    address = db.StringProperty()
    email = db.StringProperty()

class Loader(bulkloader.Loader):
    def __init__(self):
        bulkloader.Loader.__init__(self, 'PersonData',
                                   [('id', str),
                                   ('age', str),
                                   ('name', lambda x: unicode(x, 'utf-8')) #有中文字部分需設定為UTF8編碼
                                   ('address', lambda x: unicode(x, 'utf-8'))
                                   ('email', str)
                                   ])

loaders = [Loader]


6. 製作資料CSV檔(資料欄位以半形逗號隔開)。
1,43,劉的華,台北市信義區,gae@gmail.com

1,41,張學有,台北市信義區,gae@gmail.com


7. 將資料上傳到App Engine(config_file:上傳資料的程式 filename:資料CSV檔 kind:需與程式內的kind name一致)。
    C:\Program Files\Google\google_appengine\appcfg.py upload_data --config_file=Loader.py --filename=PersonData.csv --kind=PersonData


1 則留言:

  1. 你好,我實際上測試你提供的檔案後,卻發生了BadRequestError
    請問你有遇到同樣的問題嗎?
    這是我的檔案
    https://skydrive.live.com/?cid=A20B4DF09DEAD584

    回覆刪除