質問

get_by_idを使用してGoogle App Engineデータストアからオブジェクトを取得する方法を試すことができません。こちらがモデルです

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)

gqlで作成、配置、取得ができます。

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

保存された住所には次の値があります

>> 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で検索するにはどうすればよいですか

編集:私はばかであることがわかり、Addressという関数でAddress Modelを見つけようとしていました。答えてくれてありがとう、ブランドンを最初に正解としてマークし、すべてがうまくいくことを示しました。

役に立ちましたか?

解決

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>

他のヒント

アプリのキーは(kind、id_or_name)タプルのリストです-ルートエンティティの場合、常に1つの要素のみです。したがって、IDだけではエンティティを識別しません。エンティティのタイプも必要です。 db.Model.get_by_id(x)を呼び出すと、キー(Model、x)を持つエンティティを要求しています。必要なのは、キー(Address、x)でエンティティを取得するAddress.get_by_id(x)を呼び出すことです。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top