2010-10-06 14 views

risposta

73

Prova questo:

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>) 
+0

Grazie, funziona! –

+4

GQL! Come puoi non amarlo./iron – Nilzor

+0

Ciò corrisponde a una corrispondenza completa sulla chiave anziché solo alla parte ID della chiave. Mi piacerebbe ottenere tutte le entità con l'id numerico dato, non solo quello senza genitore. – aij

0

Nel mio caso ho dovuto cambiare il tipo di ID da stringa a Long

5

Purtroppo, non sembra essere un modo per scrivere una query equivalente a

SELECT * FROM Model WHERE id = <numeric_id> 

che selezionare tutte le entità modello con il dato id. Se siete male con qualcosa di equivalente a

SELECT * FROM Model WHERE id = <numeric_id> AND parent IS NULL 

si può usare qualcosa di simile

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>) 

Se il soggetto ha un genitore, però, è necessario precisare che, come parte della chiave, come

SELECT * FROM Model where __key__ = KEY('ParentModel', <parent_name_or_id>, 'Model', <numeric_id>) 

Se il genitore stesso ha un genitore, è necessario specificare che anche. (Il nonno va a sinistra del genitore, e così via.)

Naturalmente se non sei limitato a GQL (come se stai usando Python, Go o Java), puoi interrogare le chiavi, decodificarle e filtra per id, quindi recupera le entità corrispondenti. Ma ovviamente non funziona in Datastore Viewer dato che puoi usare solo GQL.

3

Un altro modo intorno è, in primo luogo ottenere la chiave per l'entità utilizzando l'id da

key = db.Key.from_path('Model', int(id)) 

quindi ottenere l'oggetto da

obj = db.get(key) 

Il vantaggio è che non c'è bisogno di fare qualsiasi formattazione di stringhe.

riferimento: set di problemi 3 in questo corso, https://classroom.udacity.com/courses/cs253/

+0

È necessario rimuovere "." dopo 'from_path' che è un errore di sintassi. Funziona diversamente però – xerotolerant