datastore low level っぽく pythonを使ってみる|google app engine
まずは、
.get_by_key_name()を調べてみました。
google\appengine\ext\db\__init__.py
keys = [datastore.Key.from_path(cls.kind(), name, parent=parent) for name in key_names] if multiple: return get(keys, config=config) else: return get(keys[0], config=config)
こうなっていたので
Key.from_pathから kindと nameにkey_nameにしていたものを入れればOKと
key = Key.from_path('myitem', 'my_test') entity = Get(key)
みたいな。
Putして Getしてみる。
Blob , datetime データはどうなる?
entity = Entity("bbtune",name="test2") bdata = Blob(zlib.compress('tttttttttttttt')) tdata = datetime.datetime.fromtimestamp(float(130000000)) entity.update({ 'p': 100, 'bdata': bdata, 'tdata': tdata }) Put(entity) # ここからGET key = Key.from_path('bbtune', 'test2') entity = Get(key) ks = entity.keys() vs = entity.values() its = entity.items() data = {} for i in range(len(its)): data[its[i][0]] = its[i][1] print 'Content-type: text/plain' print '' for key in data: if key == 'tdata' : print data[key].strftime("%Y/%m/%d %H:%M:%S") elif key == 'bdata': print zlib.decompress(data[key]) else: print data[key]
みたいな感じで上手く出来ました。
db.Modelを継承したクラスとdatastoreで自分で書いたクラスは読み書き相互利用問題ありませんでした。
若干軽くなるかもしれないけど、ほとんど変わらないかな
次は、datastore直接使った場合と db.Modelを使った場合の大量データでCPU時間などを比べてみます。