
key と key_name と ID があり、これを理解していないいけない。
GQL で key は select できるが、 key_name や ID は select できない。
・ select してきた key から key_name や ID を知ることはできる。
・ 検索条件に ID や key_name を指定することができる。
・ 検索条件に key を指定することは GQL ではできない。
注意: datastore には2つある
from google.appengine.ext import db これが GQL api の解説あり
from google.appengine.api import datastore これは cccwiki のサンプルなどで使用されている


key_name 指定して put すると
ID は空欄で、Key_Name に値が保存される。
import sys #import sys module for printing to stdout
from google.appengine.ext import db
class Car(db.Model):
brand = db.StringProperty(required=True)
wheels = db.ListProperty(db.Key)
mercedes = Car(brand="Mercedes", key_name ="b")
# mercedes.put()
print >> sys.stdout, mercedes.brand
select = mercedes.get_by_id( 130 )
print >> sys.stdout, select.brand
select = mercedes.get_by_key_name( "b" )
print >> sys.stdout, select.brand
id = 130
select = Car.get(db.Key.from_path('Car', id))
print >> sys.stdout, select.brand
key_name = "b"
select = Car.get(db.Key.from_path('Car', key_name))
print >> sys.stdout, select.brand
print >> sys.stdout, select.key()
print >> sys.stdout, select.key().id()
print >> sys.stdout, select.key().name()
select * from Greeting where key = "xxxx"
select * from Greeting where id = xxx
のような検索はできない。
select user_name from Greeting where id = xxxx
update Greeting set user_name = 'new name' where id = xxxx
のかわりに
greetings = db.GqlQuery("SELECT * FROM Greeting")
id = greeting.key().id()
id = int(self.request.get('id'))
greeting = Greeting.get(db.Key.from_path('Greeting', id))
row id から再度検索する必要なない。
get(db.Key.from_path('Greeting', id) これが再検索と同じ
key さえわかれれば db.get() で OK
from google.appengine.ext import db
r = db.get("agpoZWxsb3dvcmxkcgsLEgRCbG9nGNQBDA")
print r.title
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#Kinds_Names_and_IDs
http://code.google.com/appengine/articles/djangoforms.html
追加仕様検討
Issue 178:

http://code.google.com/p/googleappengine/issues/detail?id=178
Trunsaction / run_in_transaction
http://code.google.com/appengine/docs/datastore/functions.html#run_in_transaction