2010-12-02 2 views
0

GQLQuery에서 커서를 사용하는 것이 제대로 작동하지 않는 이유를 아는 사람이 있습니까?GQLQuery with_cursor가 작동하지 않습니다.

다음을 실행 중입니다.

query = "SELECT * FROM myTable WHERE accountId = 'agdwMnBtZXNochALEglTTkFjY291bnQYpQEM' and lastUpdated > DATETIME('0001-01-01 00:00:00') ORDER BY lastUpdated ASC LIMIT 100" 

if lastCursor:  
    dataLookup = GqlQuery(query).with_cursor(lastCursor) 
else 
    dataLookup = GqlQuery(query) 

//dataLookup.count() here returns some value like 350 

for dataItem in dataLookup:  
    ... do processing ... 

myCursor = dataLookup.cursor() 

dataLookup2 = GqlQuery(query).with_cursor(myCursor) 

//dataLookup2.count() now returns 0, even though previously it indicates many more batches can be returned 

도움 주셔서 감사합니다.

+0

왜 dataLookup.count()는 100 쿼리 제한 자체의 경우 350을 반환? –

+0

카운트는 여전히 전체 쿼리 크기를 반환 할 수 있습니다. 가져올 때 가져온 결과 배열은 100입니다. 감사합니다! – savagepanda

답변

2

검색어에 LIMIT을 사용하면 안됩니다. 첫 번째 100 개의 결과 만 반환하므로 모든 항목을 원하지만 매회 100 개씩 처리해야한다고 가정합니다. 여기

내가 (당신의 예제 코드를 기반으로) 할 것이 무엇 :

query = GqlQuery("SELECT * FROM myTable WHERE accountId = 
    'agdwMnBtZXNochALEglTTkFjY291bnQYpQEM' and 
    lastUpdated > DATETIME('0001-01-01 00:00:00') ORDER BY lastUpdated ASC") 

dataLookup = query.fetch(100) # get first 100 results 

for dataItem in dataLookup: 
    # do processing 

myCursor = query.cursor() # returns last entry of previous fetch 

if myCursor: 
    # get next 100 results 
    dataLookup2 = query.with_cursor(myCursor).fetch(100) 
+0

고마워요, 그게 다야! 코드가 약간 변경되면 fetch가 호출되면 배열을 반환하므로 초기 GqlQuery에서 커서를 검색해야합니다. 신속한 답변에 다시 한 번 감사드립니다! – savagepanda

+0

@ user526498 : 네 말이 맞아. 코드 샘플을 업데이트했습니다. –

관련 문제