2017-11-15 9 views
0

app engine ndb 쿼리 결과에 이상한 동작이 나타납니다.쿼리 결과의 AppEngine keyProperty 필드에 잠시 후 None 값이 표시됩니다.

모델 (간체) :

객체 (약 100 ~ 200.)의 전체 세트가 쿼리를 수집
class Trainer(polymodel.PolyModel): 
    user = ndb.KeyProperty(kind='User') 

:

trainers = Trainer.query() 

이 단계에서는 개인 트레이너 객체가 가지고

user = trainer.user.get() 

트레이너 컬렉션 :함으로써 얻어 질 수있는 유효한 사용자 객체 여러 중간 파이썬 목록으로 나뉩니다. 그 후 트레이너 개체의 대부분은 .user에 대한 None 값을가집니다. 몇 년 동안이 코드를 사용했습니다. 다른 사람이 ndb.KeyProperty으로 이런 문제를 겪었습니까? 데이터 집합이 너무 커지면 주요 속성이 제거 될 수 있습니까?

+0

개발자 콘솔에서 실제 데이터 저장소 엔티티를 찾아보고 실제로 '사용자'가 설정되어 있는지 확인할 수 있습니다. AFAIK는 엔티티가 명시 적으로 지정되지 않는 한 'None'으로 설정할 수 없습니다. 프로젝션 쿼리를 통해 획득하는 동안 엔티티를 가져 오는 동안 조심하십시오 - 이들은 불완전하고 프로젝션에 포함되지 않은 모든 속성을 잃게됩니다. –

+0

개발자 콘솔에서 모든 교육 엔티티에는 사용자 정의 속성 (키)이 있습니다. 결과 집합을 사용한 작업 중에 만이 사용자 특성은 없음으로 설정됩니다. – jjmurre

+0

이상한 조건으로 이어지는 실제 코드를 표시 할 수 있습니까 (콜렉션 분할 처리 포함)? 또는 문제를 재분배하는 데 사용할 수있는 MCVE를 추출 하시겠습니까? –

답변

0

아무 것도 가리 키지 않는 키가있는 KeyProperty 필드가있었습니다 (포인터가 매달려 있음).

그러나 가장 큰 문제는 트레이너 객체가 지연 호출에서 인수로 사용 되었기 때문에 객체가 어떤 방식으로 직렬화되어야한다는 것입니다 (아마도 산세 사용). 그러나 작동하는 데 사용 된 관련 키 특성은 다른 타이밍으로 인해 가능할 수 있으며 접근법은 더 이상 작동하지 않습니다. 트레이너 객체의 urlsafe 키를 전달하여 정의 된 함수에 대한 인수로 문제를 해결했습니다.