金融ITニュース。時々雑ネタ。

Fintechからレガシーまで、金融IT業界のニュース

Google App Engine/Pythonでbulkloader

Windowsかつeclipse環境かつ開発環境でbulkloader使っていろいろはまったのでメモ

ソース

ディレクトリ構成は以下の通り。

+app.yaml
+model.py
+bulkloader/
    +loader.py
    +article.csv

app.yaml
開発環境でテストする場合は「dev~」つけないといけない

application: dev~アプリケーションID
version: 1
runtime: python
api_version: 1

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


model.py
Google推奨のndbはbulkloader使うとエラーになるのでdbでモデルを記述

from google.appengine.ext import db

class MainArticle(db.Model):
    timestamp = db.StringProperty()
    article = db.StringProperty()

loader.py
入力ファイルのarticleは全角文字含むのでutf8デコード

from google.appengine.tools import bulkloader
import model

class DataLoader(bulkloader.Loader):
    def __init__(self):
        bulkloader.Loader.__init__(self, 'MainArticle', [
                ('timestamp', str),
                ('article', lambda x: x.decode('utf8')),
                ])

loaders = [DataLoader]

eclipseで実行

事前に開発サーバを立ち上げておく

以下の設定でRun
f:id:memoyashi:20150218003300p:plain

bulkloaderを実行

設定は以下の通りでRun
argumentsに

upload_data --config_file=${project_loc}/bulkloader/loader.py --filename=${project_loc}/bulkloader/article.csv --kind=MainArticle --url=http://localhost:8080/remote_api ${project_loc}

を指定
f:id:memoyashi:20150218003317p:plain

datastore viewerから確認

http://localhost:8000/datastore?kind=カインド名 でデータストア内容を参照できる
f:id:memoyashi:20150218003328p:plain