key_nameメモ

  • Foo(key_name=...)でキーの名前を指定できる
  • foo.key_nameになってるかと思いきやfoo.key().name()だった
  • Foo.get_by_key_name(...)でその「キーの名前」でアクセスできる
  • key_nameがコンフリクトしたら例外とか飛ぶのかなーと思ったけど飛ばなかった。
  • 試しにDateTimeProperty(auto_add_now=True)をつけて何度か同じkey_nameでアクセスしてみたら、その日時の情報は追加のたびに変わって行ったがDataStore Viewerに現れた「日時情報のついているエントリー」は1個だけだった。つまりkay_nameがかぶった場合は警告無しに上書きされる、ということだな。

なお上記の調査は全部ローカルの開発サーバで行ったので本番環境では違うかもしれない

こんな感じで使おうと思っている:

def generate_key(prefix="", salt=DEFAULT_SALT):
    from datetime import datetime
    import hashlib
    time = str(datetime.now()) + salt
    return prefix + hashlib.md5(time).hexdigest()

ちなみに数字で始まるkey_nameは禁止されているので「game_」とかプレフィックスつけて使おうと思っている。わかりやすいし。