python de google spreadsheetをDB化
DBをspreadsheetで管理したらイケメンになれる!かもしれないので、やってみました。
spreadsheetをイジイジする方法は何パターンかあるのですが、
google先生が提供している
gdata.spreadsheet.text_db
というモジュールが良さげな感じだったので一通り試してみました。
実行環境
pc: mac osx lion
python: 2.5.6
必要なもの
gdata-python-client
http://code.google.com/p/gdata-python-client/
をインストールしてください。
使い方
今回はtext_dbというモジュールを使います。
スプレッドシートをDBっぽく使えます。
接続
こんな感じです。
username = os.environ['GMAIL_ADDR'] passwd = os.environ['GMAIL_PASS'] databasename = "testdb" tablename = 'testtable' try: # connect client = gdata.spreadsheet.text_db.DatabaseClient(username, passwd) except Exception, e: print repr(e)
あらかじめIDとPassはシェルでexportしております。
もしWebからIDとPASSを取得して接続したかったらこんな感じらしい。
なるほどねー (AuthSubは以前の記事を参照)
*ココ参照 http://stackoverflow.com/questions/870192/authsub-with-text-db-in-google-app-engine
:TODO 未確認コード
auth_url = client._GetDocsClient().GenerateAuthSubURL(
next_url,
scope='http://spreadsheets.google.com/feeds/ http://docs.google.com/feeds/documents/',
secure=False,
session=True)
データベースの取得、作成
こんな感じ。
if client.GetDatabases(name=databasename) == []: logging.debug('not exists db, create ') client.CreateDatabase(databasename) db = client.GetDatabases(name=databasename)[0]
GetDatabasesで返ってくるのはリストだから、[0]をつけて先頭のものをとってきている。
噂によると、データベースの名前を前方一致で取得してくるらしいので
test
testA
っていうDBがあったら[testのDB, testAのDB]みたいな感じで返ってくる、らしい(未確認)
テーブルの作成、取得
#適当に設定 keys = ('id', 'name', 'price') if db.GetTables(name=tablename) == []: logging.debug('create table') db.CreateTable(tablename, [key for key in keys]) #取得 tbl = db.GetTables(name=tablename)[0] #便利機能?(別に必要ありません) tbl.LookupFields() print tbl.fields
これも先ほどのDBと同じ感じ。
便利機能?って書いてあるのは、
ライブラリを読んでて、見つけたものです。
LookupFields()
を実行するとプロパティのfieldsというところに
フィールド名がリストで入る。
これを実行しておくと、データ取得の際にキーをわざわざ書かなくてもいい感じになりそうです。
(まぁ、取得したデータの1行目を見れば分かるんですけどね)
挿入
rec = dict(id = 'cat', name = u'いいq', price = str(400)) tbl.AddRecord(rec)
これで挿入できます。
ブラウザでSpreadsheetを確認すると”入ってるー!”ってなります。
日本語を使うときは、
# -*- coding: utf-8 -*-
を忘れずに。
レコードの取得
tbl = db.GetTables(name=tablename)[0] records = tbl.GetRecords(start_row=1,end_row=1) for record in records: print record.content
Recordクラスのcontentにデータが入っているので、
これをイジイジしてあげるといいです。
実行すると、
{'price': '400', 'id': 'cat', 'name': u'\u3042'}
と出力されます。
終わりに
ブラウザを開いているとDBとがリアルタイムで更新されるので、
すげぇぇ、ちょーたのしーっ!って気分になれます。
日本語の情報はほとんどありませんね^^;
結局使い方はPyDocとライブラリのソースコードを読むのが早そう。。。
text_dbは
gdata.spreadsheet.service
gdata.docs.service
らへんのモジュールをラップしてる感じなので、
Google SpreadSheet API
http://code.google.com/apis/spreadsheets/data/1.0/developers_guide_python.html
とあわせて読むと使い方がだいたい分かりそうな気がします。
おしまい(・∀・)