문제

get_by_id를 사용하여 Google App Engine Datastore에서 객체를 얻을 수있는 방법을 운동 할 수 없습니다. 여기 모델이 있습니다

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에서 어떻게 찾을 수 있습니까?

편집 : 나는 바보이고 주소라는 함수에서 주소 모델을 찾으려고하는 것으로 밝혀졌습니다. 귀하의 답변에 감사드립니다. Brandon을 처음부터 정답으로 표시하고 모든 것이 작동해야한다고 시연했습니다.

도움이 되었습니까?

해결책

방금 시도했습니다 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) 튜플 목록입니다 - 루트 엔티티의 경우 항상 하나의 요소 만 있습니다. 따라서 ID만으로는 엔티티를 식별하지 않습니다. 엔티티의 유형도 필요합니다. db.model.get_by_id (x)를 호출하면 키 (model, x)가있는 엔티티를 요구합니다. 당신이 원하는 것은 Key (address, x)로 엔티티를 가져 오는 address.get_by_id (x)를 호출하는 것입니다.

get_by_id ( "여기")에서 긴 유형을 사용해야합니다. int 유형에는 오류 메시지가 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top