google-app-engine
  • google-cloud-datastore
  • gql
  • gqlquery
  • 2010-12-02 25 views 0 likes 
    0

    Je me demande si quelqu'un sait pourquoi l'utilisation de curseurs avec GQLQuery ne semble pas fonctionner correctement.GQLQuery with_cursor ne fonctionne pas

    Je cours ce qui suit.

    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 
    

    Merci pour votre aide.

    +0

    Pourquoi dataLookup.count() retourne 350 si elle-même les limites de votre requête à 100? –

    +0

    le nombre peut toujours retourner la taille totale de la requête. quand vous faites une recherche, le tableau obtenu est 100. Merci! – savagepanda

    Répondre

    2

    Vous ne devriez pas utiliser une LIMIT dans votre requête, car cela ne retournera que les 100 premiers résultats, et je suppose que vous les voulez tous, mais les traiter en lots de 100 à chaque fois.

    Voici ce que je ferais (en fonction de votre code par exemple):

    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

    Merci, c'était ça! léger mod au code, quand fetch est appelé, il renvoie un tableau, ainsi le curseur doit être récupéré à partir du GqlQuery initial. Merci encore pour la réponse rapide! – savagepanda

    +0

    @ user526498: vous avez raison. J'ai mis à jour l'exemple de code. –

     Questions connexes

    • Aucun problème connexe^_^