2013-08-30 2 views
2

Google-Appengine-NDB를 사용하고 있습니다. 그리고 데이터베이스에서 고유 한 값을 얻으려고했지만 작동하지 않습니다.고유 값을 얻는 가장 좋은 방법은

 
Now my code is: 
    query_set = cls.query().order(cls.ls) # Getting ordered queries. 
    set_of_field = set([data.field for data in query_set]) # And using this loop for differ.`

그러나 루프가 너무 오래 걸립니다 (12 초 초과). 도와주세요, 어떻게 속도를 높이거나 ndb에서 고유 값을 얻는 방법은 무엇입니까?

+1

돌아가서 대답에 따라'별개 '를 시도하십시오 - 현재 SDK를 가지고 계십니까? 나는 별개의 -'x = models.Product.query (projection = [ "product_type"], distinct = True)'를 시도하고 광고 된대로 작동한다. –

+1

나를 위해 최신 SDK 1.9.28.388에서 작동합니다. 한 가지 메모 : 투영/고유 항목이 쿼리 개체의 일부로 제공되지 않고 query()의 일부로 제공되는 경우에만 작동합니다. 하나의 질문 : 하나의 모델을 속이기 가능하게하고 위의 쿼리를 별개의 값으로 처리하는 것과 항상 고유 한 값만 포함하는 두 모델을 유지하는 것 사이의 트레이드 오프는 무엇입니까? –

답변

2

별개의 쿼리를 시도, 자신의 분야 색인 경우 은이를 사용할 수 있습니다 https://developers.google.com/appengine/docs/python/ndb/queries#projection

query_set = cls.query(projection=["field"], distinct=True) 
set_of_field = [data.field for data in query_set] 

을하지만 양이 많을 경우이 작업 대기열에서이 작업을 수행 할 수 있습니다 어딘가에 결과를 저장하거나 다른 모델에 뚜렷한 데이터를 보관하십시오.

+0

예, 이미 시도했습니다. 그러나 오류가 있습니다 :'TypeError : __init __()에 예기치 않은 키워드 인수 'distinct'가 있습니다. 그래서 지금은 taskqueue를 사용하고 있습니다, 답변 해 주셔서 감사합니다. – Bulgantamir