2009-03-16 18 views
6

get_by_idを使用してGoogle App Engine Datastoreからオブジェクトを取得する方法を試すことができません。ここで私は、それらを作成し、それらを置き、GQLでそれらを取得することができモデルGoogle App Engine Datastoreのモデルクラスのget_by_idメソッド

from google.appengine.ext import db 

class Address(db.Model): 
    description = db.StringProperty(multiline=True) 
    latitude = db.FloatProperty() 
    longitdue = db.FloatProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 

です。

address = Address() 
address.description = self.request.get('name') 
address.latitude = float(self.request.get('latitude')) 
address.longitude = float(self.request.get('longitude')) 
address.put() 

Aがアドレスを保存したが

>> address.key() 
aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw 
>> address.key().id() 
14 

の値を持っている私は、キー

from google.appengine.ext import db 
address = db.get('aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw') 

を使用してそれらを見つけることができます。しかし、ID

>> from google.appengine.ext import db 
>> address = db.Model.get_by_id(14) 

でそれらを見つけることができませんアドレスは無し、試してみると

>> Address.get_by_id(14) 
AttributeError: type object 'Address' has no attribute 'get_by_id' 

IDで検索するにはどうすればよいですか?

編集:それは私がばかだと判明し、アドレスと呼ばれる機能でアドレスモデルを見つけようとしていました。あなたの答えをありがとう、私は彼が最初に入って、それがすべて動作する必要があることを示したように正しい答えとしてブランドンをマークしました。

答えて

22

私はちょうどshell.appspot.com上でそれを試してみましたが、正常に動作するようです:

Google Apphosting/1.0 
Python 2.5.2 (r252:60911, Feb 25 2009, 11:04:42) 
[GCC 4.1.0] 

>>> class Address(db.Model): 
    description = db.StringProperty(multiline=True) 
    latitude = db.FloatProperty() 
    longitdue = db.FloatProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 

>>> addy = Address() 
>>> addyput = addy.put() 
>>> addyput.id() 
136522L 
>>> Address.get_by_id(136522) 
<__main__.Address object at 0xa6b33ae3bf436250> 
+0

..私はさらに – tarn

+2

を調査するでしょう、それをチェックアウトするためのおかげでしまう+2 iもApp Engineのシェル – tarn

+0

の私を認識させる可能性があるためならば、これは完全でアイテムを取得しようと、Googleで – Neelesh

6

アプリのキーは(種類、id_or_name)タプルのリストです - ルートエンティティのために、常に一つだけの要素長いです。したがって、IDだけではエンティティを識別することはできません。エンティティのタイプも必要です。 db.Model.get_by_id(x)を呼び出すと、key(Model、x)を持つエンティティを要求しています。あなたが望むのはAddress.get_by_id(x)を呼び出すことです。これはキー(Address、x)でエンティティをフェッチします。

0

get_by_id( "here")にlong型を使用する必要があります。 Int型にはエラーメッセージが必要です。

+0

これはこの質問の答えではないかもしれませんが、それは私の問題を解決しました。 – Nico