2010-11-29 2 views
5

혼란 스러워요. get_or_insert(..)입니다. key_name으로 무엇을 전달해야합니까? 다음 예를 고려하십시오.Google App Engine - Datastore get_or_insert key_name 혼동

두 사람이 같은 이름을 가질 수 없다고 가정하십시오. 예를 들어 Peter이라는 새로운 Person을 가져 오거나 삽입하고 싶다면 내 get_or_insert 성명은 어떻게 생겼습니까?

건배,

피트

+0

선언 된 db.StringProperty 이름이 key_name과 아무 관련이 없다는 것을 알고 계십니까? – systempuntoout

답변

5

여기 가능성이 혼란스러운 것은 귀하의 예제에서 name = db.StringProperty 비트가 필요하지 않도록 키, 모델 선언에 직접 표시하지 않습니다. get_or_insert는 첫 번째 (필수) 인수로 키 이름을 소요, 그래서 당신은 다음과 같은 코드를 찾고 : 당신은 기본 키처럼 key_name 생각할 수

person = Person.get_or_insert('Peter') 
# other interesting & useful code here... 
# later, maybe we need to retrieve that key name from the object: 
name = person.key().name() 
assert(name == "Peter") 
+0

그러면 위와 같이 내 모델에서 작동합니까? – Peter

+0

예. 여기에서 설정되는 키 이름은 엔티티 본문 내부의 변경 가능한 속성이 아니라 엔티티에 대한 영구 식별자입니다. 위의 예에서 모델 선언의 "name"속성은 사용되지 않습니다. –

+0

오류가 발생합니다. TypeError : 'Key'객체를 호출 할 수 없습니다. – ericso

1

. get_or_insert(...)에 대한 문서를 살펴보면 백엔드 코드의 예가 있습니다.

이름이 고유 한 필드 인 경우이를 키 이름으로 사용할 수도 있습니다. 공백을 없애고 사례를 정규화하는 것이 좋겠지 만.