3

Google 애플리케이션 엔진에서 특정 열만 가져 오기 위해 db를 쿼리 할 수 ​​있습니까? 다음과 같이Google 응용 프로그램 엔진 - 파이썬에서 열 몇 개만 가져 오는 ndb 쿼리

class userData(ndb.Model): 
    id = ndb.StringProperty() 
    name = ndb.StringProperty() 
    emailAddress = ndb.StringProperty() 

내가 보통 DB를 조회 :

userData.query().filter(ndb.GenericProperty('id') == "requiredId").fetch() 

을하지만이 나에게 ID, 이름, 이메일 포함 된 결과를 제공

예를 들어, 나는 다음과 같이 모델을 정의했습니다.

지금은 의 id와 name 만 받고 싶지만 emailAddress은 받고 싶지 않습니다. 어떻게해야합니까?

감사합니다. 당신이 projection query

Exaple라고해야 할 무엇

답변

10

:

qry = Article.query() 
articles = qry.fetch(20, projection=[Article.author, Article.tags]) 
for article in articles: 
    # code here can use article.author, article.tags 
    # but cannot use article.title 

귀하의 코드 :

class userData(ndb.Model): 
    id = ndb.StringProperty() 
    name = ndb.StringProperty() 
    emailAddress = ndb.StringProperty() 

user = userData.query().filter(ndb.GenericProperty('id') == "requiredId")\ 
         .fetch(projection=[userData.id, userData.name]) 

나는 docs 인용 할 필요가 있지만 :

프로젝션을 수행 할 수 있습니다 유독하다 엘; 여러 개의 큰 엔터티에있는 두 개의 작은 속성이 각각 인 경우에는 을 가져오고 데이터를 덜 직렬화하므로 가져 오기가 더 효율적입니다. 당신이 투영

P.S.를 조회 사용할 때

위 생각해 당신이 PEP

+1

대답 당신에게 @Jimmy 케인 감사하고 내가 너무 PEP을 따릅니다 따르십시오

또한 파이썬에서 클래스 이름에 대한 CapWords 규칙을 사용합니다. –

+1

https://cloud.google.com/appengine/docs/python/ndb/projectionqueries – Tjorriemorrie

+1

으로 링크가 변경되었습니다. 긴 인덱싱되지 않은 TextProperty 또는 JsonProperty가 작동하지 않습니다. 난 여전히 하위 집합을 선택에서 이러한 열을 포함하는 가장 좋은 방법은 궁금 하군요. – kbjerring