2010-10-06 10 views

cevap

73

bu deneyin: Benim durumumda

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

sayesinde, çalışır! –

+4

GQL! Bunu nasıl sevemezsin?/irony – Nilzor

+0

Bu, anahtarın yalnızca ID bölümünün yerine anahtarda tam eşleşme yapar. Tüm varlıkları, yalnızca ebeveynleri olmayan biriyle değil, sayısal kimlikle almak istiyorum. – aij

0

Ben maalesef uzun

5

dizesi kimlik türünü değiştirmek zorunda

için bir sorgu eşdeğer yazmak için bir yol olarak orada görünmüyor Belirtilen kimliğe sahip tüm Model öğelerini seçecek olan . Eğer

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

eşdeğer bir şeyle Tamam iseniz, bu anahtara bir parçası olarak belirtmek gerekir,

senin varlık olsa bir üst öğesi yaparsa

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>) 
gibi bir şey kullanabilirsiniz
SELECT * FROM Model where __key__ = KEY('ParentModel', <parent_name_or_id>, 'Model', <numeric_id>) 

Ebeveynin kendisinde bir ebeveyn varsa, bunu da belirtmeniz gerekir. (Büyükbaba, üst öğenin soluna gider, vb.)

Elbette GQL ile sınırlı değilseniz (Python, Go veya Java kullanıyorsanız), anahtarları sorgulayabilir, kodlarını çözebilirsiniz. ve kimliğine göre filtreleyin, ardından ilgili öğeleri alın. Ama tabi ki bu sadece GQL'i kullanabildiğiniz için Datastore Viewer'da çalışmaz.

3

etrafında is başka yolu da, ilk önce

obj = db.get(key) 

avantajdır nesneyi almak

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

tarafından kimliği kullanarak varlık için anahtarı almak, herhangi yapmak gerekmez dize biçimlendirme.

referans: Sorun bu sahasında set 3, https://classroom.udacity.com/courses/cs253/

+0

'. ' from_path'dan sonra bu bir sözdizimi hatasıdır. Aksi halde çalışır – xerotolerant