2011-10-24 3 views
1

잘 작동하는 다음 코드가 있습니다.gql 유형의 쿼리를 Query로 대체하는 방법은 무엇입니까?

comments = PersonComment.gql('WHERE ANCESTOR IS :parent AND verified=True ORDER BY added DESC', parent=person_key).fetch(PAGE_SIZE_COMMENTS+1, (page)*PAGE_SIZE_COMMENTS) 

다음과 같이 바꾸고 싶습니다.

 comments = db.Query(PersonComment) 
    comments.ancestor(person_key) 
    comments.filter('verified = ', True) 
    comments.order('-added') 
    comments.fetch(PAGE_SIZE_COMMENTS+1, (page)*PAGE_SIZE_COMMENTS) 

하지만 작동하지 않습니다. 거기에 뭐가 잘못 되었나요?

답변

5

fetch 결과 집합을 반환합니다. comments은 여전히 ​​Query 개체입니다.

comments = comments.fetch(PAGE_SIZE_COMMENTS+1, (page)*PAGE_SIZE_COMMENTS)

또는 혼동을 피하기 위해 다른 쿼리 개체 뭔가 전화 : 당신은이 작업을 수행 할 수 있습니다.

페이징을 위해 오프셋을 사용하여 페치를 사용하는 것은 실제로 비효율적입니다. query cursors을 사용해보십시오.

+0

감사합니다. Drew. 가져 오기가 실제로 모든 레코드를 읽고 내가 요청한 것을 반환합니다 (커서와 비교)? 커서를 사용해야하는 이유는 무엇입니까? –

+0

@LA_ 오프셋을 사용하여 쿼리를 제거하고 제안 된대로 커서를 사용하십시오. 오프셋이있는 검색어는 비효율적이며 비용이 많이 청구되므로 많은 Datastore 읽기 비용이 발생합니다. – systempuntoout

관련 문제