문제

Google App Engine Datastore에서 DB 모델에 대한 새로운 속성을 만들었습니다.

오래된:

class Logo(db.Model):
  name = db.StringProperty()
  image = db.BlobProperty()

새로운:

class Logo(db.Model):
  name = db.StringProperty()
  image = db.BlobProperty()
  is_approved = db.BooleanProperty(default=False)

'IS_APPORVED'값 세트가없는 로고 레코드에 대한 쿼리 방법은 무엇입니까? 나는 시도했다

logos.filter("is_approved = ", None)

그러나 작동하지 않았습니다. 데이터 뷰어에서 새 필드 값은 다음과 같이 표시됩니다.

도움이 되었습니까?

해결책

앱 엔진 문서에 따르면 쿼리 및 색인, 엔터티 간에는 차이가 있습니다 아니요 재산에 대한 가치와 없는 그것에 대한 가치; "필터링 된 속성이없는 엔티티는 쿼리에 의해 반환되지 않습니다." 따라서이 오래된 레코드에 대한 쿼리를 작성할 수 없습니다.

유용한 기사는입니다 모델의 스키마 업데이트, 일부 재산이 누락 된 엔티티를 찾는 유일한 유일한 방법은 모든 재산을 조사하는 것입니다. 이 기사에는 대규모 엔티티 세트를 순환하고 업데이트하는 방법을 보여주는 예제 코드가 있습니다.

다른 팁

어쩌면 이것이 바뀌었지만 없는 필드.

GQL 쿼리를 시도하면 SELECT * FROM Contact WHERE demo=NULL, 데모 필드가 누락 된 레코드 만 반환합니다.

문서에 따르면 http://code.google.com/appengine/docs/python/datastore/gqlreference.html:

비교의 오른쪽은 다음 중 하나 일 수 있습니다 (속성 데이터 유형에 적합) : [...] 부울 문자, 참 또는 거짓; 그만큼 없는 리터럴, 널 값 (파이썬에서는 없음)을 나타냅니다.

확실하지 않습니다 "없는" 와 같다 "잃어버린" 그러나 : 제 경우에는이 필드가 이미 내 모델에 존재했지만 창조에 채워지지 않았습니다. 아마도 널 쿼리가 특정 사례에서 작동하는지 알려줄 수 있습니까?

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