문제

IntegerProperty가 null (없음) 인 Google App Engine의 레코드를 쿼리하려고합니다. 이것이 제가 성공하지 못한 것입니다.

data = db.GqlQuery("SELECT * FROM MyModel WHERE intProp=:1",None)

그리고 쿼리와 함께 :

query = db.Query(MyModel)
query = query.filter('intProp', None) 
data = query.fetch(limit=100)

모든 도움이 감사하겠습니다.

class MyModel(db.Model):
    intProp = db.IntegerProperty()
도움이 되었습니까?

해결책

코드가 정확해 보입니다. 실제로 인스턴스가 있습니까? MyModel 와 함께 intPropNone...?

편집하다: OP의 의견에 따라 그것은 스키마 마이그레이션의 문제 일 것입니다. 그는 새로운 부동산을 추가하고 기존 엔티티가 나타나게 될 것으로 예상했습니다 (없음). 그것은 GAE의 스키마가 어떻게 변하는가가 아닙니다. 문서:

App Engine Datastore는 모든 엔티티에 동일한 속성 세트를 갖도록 요구하지는 않습니다. 새로운 속성을 추가하기 위해 모델을 업데이트 한 후에는 기존 엔터티가 이러한 속성 없이도 계속 존재합니다. 어떤 상황에서는 괜찮습니다. 더 이상 일을 할 필요가 없습니다. 언제 돌아가서 기존 엔티티를 업데이트하여 새로운 속성도 갖고 싶습니까? 한 가지 상황은 새로운 속성을 기반으로 쿼리를하고 싶을 때입니다. 그림이있는 예에서 "가장 인기있는"또는 "가장 인기있는"쿼리는 기존 사진을 반환하지 않습니다. 아직 등급 특성이 없기 때문입니다. 이 문제를 해결하려면 데이터 스토어에서 기존 엔티티를 업데이트해야합니다.

내가 인용하고있는 에세이는 그것을 할 수있는 한 가지 방법을 보여줌으로써 계속되지만, GAE가 예약 한 작업, 원격 API, & c 이전부터 꽤 구식 접근법입니다. 우리는 이제 더 잘할 수 있습니다. 앱 엔진 팬은 매우 최근에 있습니다 게시하다 그것은 일반적인 접근법 (그리고 자신의 스키마 마이그레이션 중에 그가 저지른 실수를 보여 주므로 다른 사람들이 그것을 피할 수 있습니다!). 원격 API 핵심 도구로서; 그는 또한 지적합니다 모듈 (Python의 저자이자 App Engine 개발의 주요 기여자 인 Guido van Rossum이 시작한 Rietveld 오픈 소스 코어 리뷰 프로젝트에서) 작업을 깔끔하고 올바르게 수행합니다 (해당 코드를 조금 조정해야합니다. 물론 Rietveld 대신 모델과 C를 사용합니다).

다른 팁

나는 다음과 같은 트릭을 사용하여 널 값을 가진 엔티티를 쿼리 할 수있었습니다.

MyModel에서 *를 선택하여 intprop <0입니다

당연히 그러한 문서화 된 방법이 미래 버전과 호환 될 것이라는 Garantie는 없습니다.

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