2011-11-29 10 views
5

Nel GQL reference, si è incoraggiato a utilizzare la parola chiave IN con un elenco di valori, e di costruire una chiave di mano query GQLGQL query con __key__ nella lista delle chiavi

SELECT * FROM MyModel WHERE __key__ = KEY('MyModel', 'my_model_key') 

avrà successo. Tuttavia, utilizzando il codice che ci si aspetta di lavorare:

SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'), 
             KEY('MyModel', 'my_model_key2')) 

nel Visualizzatore Datastore, v'è una denuncia di "non valido stringa di query GQL."

Qual è il modo corretto per formattare tale query?

AGGIORNAMENTO: non è possibile farlo con l'SDK corrente. Come noto nel mio commento, quando si utilizza un elenco, solo un riferimento (ad esempio :1 o :email) o un valore int, float, stringa, booleano o valore letterale null sono voci di elenco accettabili.

SECONDO AGGIORNAMENTO: Ho corretto il bug ed ora è possibile eseguire tali query. La correzione può essere trovata in Google Code Hosting diff.

PS So che ci sono modi più efficienti per farlo in Python (senza costruire una query GQL) e usando remote_api, ma ogni chiamata a remote_api conta contro quota. In un ambiente in cui la quota non è (necessariamente) libera, le query veloci e sporche sono molto utili.

+0

Pensa davvero che il numero di entità che si scaricano manualmente nella console aggiungerà una quantità significativa di quota consumata se lo si è fatto tramite remote_api? –

+0

No. Ancora una volta, mi sto solo chiedendo come strutturare correttamente la query. Il secondo snippet nel mio post sembra che non sia una "stringa di query GQL non valida". È il caso che 'WHERE __key__ IN' non è valido GQL? – bossylobster

+0

Sono ancora confuso perché vuoi farlo, però. È un modo particolarmente inefficiente per recuperare le entità. –

risposta

1

Dopo la fix è stato attuato, il frammento di codice dal post originale sarà sufficiente:

SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'), 
             KEY('MyModel', 'my_model_key2')) 

PS ho realizzato il mio commento sul post originale non può essere sufficientemente chiara come risposta ai telespettatori futuri.

2

Non capisco. Il tuo obiettivo è visualizzare un elenco specifico di entità nel Datastore Viewer per evitare di consumare quote? Non so di un modo per fare questo con GQL, ma è possibile accedere direttamente le entità se si conosce la loro chiave, ad esempio:

https://appengine.google.com/datastore/edit?app_id=myapp&key=key1

https://appengine.google.com/datastore/edit?app_id=myapp&key=key2

Se stai facendo questo nel codice , per favore non provare a usare GQL. Utilizzare db.get(keys) o qualcosa di simile.

+0

Non ho problemi con 'db.get' o' MyModel.get_by_key_name' o 'MyModel.get_by_id'. La domanda è stata alimentata dal desiderio di sapere come potrebbe essere fatto. Anche eseguire singole query (come con 'key =' nella stringa di query) può essere eseguito con 'SELECT * FROM MyModel WHERE __key__ = KEY ('MyModel', 'my_model_key')', come ho detto. – bossylobster

Problemi correlati