2011年1月22日

使用 Google 應用服務引擎 ( GAE = Google App Engine ) 建立 Facebook 應用程式 (VIII) 大量資料庫上傳

appcfg.py upload_data,相當於ms-sql的bulk insert,不過…相當麻煩

http://code.google.com/intl/zh-TW/appengine/docs/python/tools/uploadingdata.html

照著上面的文件說明,會踹一次就成功的,只能說是神人了…經過無數次試誤,歸納出以下步驟;以下所提到的"腳本目錄"就是app.yaml等原始碼所在的目錄

(本地端環境寫入)

1.如果先前沒有設定PYTHONPATH的話,要記得設定,不然它會找不到你的.py檔;PYTHON_LIB則是要處理windows和linux/unix系統間的不一致,尤其是路徑的表示法

set PYTHONPATH=...放model的目錄;為了方便起見,就用腳本目錄吧
set PYTHON_LIB="C:/Program Files/Google/google_appengine"

2."編輯您的 app.yaml,並在 handlers: 區段新增下列幾行程式碼:"。這句話對windows使用者而言是有點輕描淡寫了,如果上一步沒作好,會debug到天荒地老;script所在位置放絕對路徑是不work的!!在handlers:的下一行新增以下幾行

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

3.為了方便起見,先進入腳本目錄,然後在本地端起動伺服器。沒起動的話,會在執行appcfg.py upload_data時得到無法建立連線之類的錯誤訊息。若要清空資料,加參數  --clear_datastore

python "C:\Program Files\Google\google_appengine\dev_appserver.py" --port=8080 .

4."建立載入器類別",這步大概照做

5."準備您的資料",這步大概照做,所撰寫的程式要放在前述的PYTHONPATH底下;為了方便起見,先進入腳本目錄,然後將新腳本放在此目錄下

6."將資料載入開發伺服器",執行下列指令,登入就打admin,密碼沒有,如app.yaml所指定;若出現10061錯誤,加上--num_threads=4;為了方便偵錯,把錯誤訊息重導到到error.txt的話,可以在下列指令最後再加上 >errors.txt 2>&1

python "C:\Program Files\Google\google_appengine\appcfg.py" upload_data --config_file=XXX.py --filename=YYY.csv --kind=ZZZ --url=http://localhost:8080/remote_api --num_threads=4 .

p.s.像ms sql analyzer那樣的工具 http://localhost:8080/_ah/admin/datastore

p.s2.跳出一堆error,似乎和utf-8有關...字串型態需設為 lambda x: unicode(x, 'utf-8') ,參考 http://code.google.com/p/googleappengine/issues/detail?id=157#c18 ;文字中的雙引號"也要改為兩個""作為escape

沒有留言:

張貼留言