存在しなけれ r.put() してくれる。
key_name は省略できない。 key_name は、先頭が数字は不可。
同時に実行されたら
r = Greeting.get_or_insert("Key001", Title="test", xxx = xxx, .... )
- Model.get_or_insert(key_name, **kwds)
-
Get or create an entity of the model's kind with the given key name, using a single transaction. The transaction ensures that if two users attempt to get-or-insert the entity with the given name simultaneously, then both users will have a model instance that refers to the entity, regardless of which process created it.
Arguments:
- key_name
- The name for the key of the entity
- **kwds
- Keyword arguments to pass to the model class if an instance with the specified key name doesn't exist. The parent argument is required if the desired entity has a parent.
The method returns an instance of the model class that represents the requested entity, whether it existed or was created by the method. As with all datastore operations, this method can raise a TransactionFailedError if the transaction could not be completed.
key_name は長いものはだめだったような気がしていたけれども、間違いだった。
ただ、やはり where 句の検索条件には利用できない。
A key_name is stored as a Unicode string (with str values converted as ASCII text). A key_name must not start with a number.
Tip: Key names and IDs cannot be used like property values in queries. However, you can use a named key, then store the name as a property. You could do something similar with numeric IDs by storing the object to assign the ID, getting the ID value using obj.key().id(), setting the property with the ID, then storing the object again.
http://code.google.com/appengine/docs/datastore/keysandentitygroups.html
親に子を追加
p = db.GqlQuery("select * from Oya_model")[0]
r = Ko_model.get_or_insert("Key001",parent=p,att1=200801,...)
子から親を検索 親が見つかったら、その kind と key を表示
pp = db.GqlQuery("select * from Ko_Model")
for p in pp:
if p.parent():
print p.parent().kind(), p.parent_key()
Model.kind() の意味がようやくわかった。
http://code.google.com/appengine/docs/datastore/modelclass.html#Model_kind