2010-06-30 5 views
6

Google App Engine'de, bir öğenin bir Anahtarı var. Bir anahtar, bir yoldan yapılabilir, bu durumda str (anahtar), bir opak hex dizgesidir. Örnek: Eğer kod çalıştırmasına doğru yolları kurmak eğerGoogle App Engine tüzelliğinin Python'daki anahtar yolu str kodu nasıl çözülür?

from google.appengine.ext import db 
foo = db.Key.from_path(u'foo', u'bar', _app=u'baz') 
print foo 

agNiYXpyDAsSA2ZvbyIDYmFyDA 

verir.

Böylece, altıgen ipi nasıl alabilir ve yolu geri alabilir? Cevabın Key veya entity group dokümanlarında olacağını düşündüm, ancak göremiyorum. Eğer (yapıcısına o opak tanımlayıcı geçirerek oluşturulabilir) Key nesneyi sahip olduktan

+0

Anahtarınızı kurucuyu kullanarak alabilirsiniz - http://code.google.com/appengine/docs/python/datastore/keyclass.html#Key. Anahtardan olsa nasıl geri döneceğimi bilmiyorum. – hwiechers

+0

Bu aracı, belirli bir anahtarı görüntülemek için kullanabilirsiniz: http://datastore-key.appspot.com/. JSON çıkışı ile de bir servis olarak çalışır. – Deleplace

cevap

7
from google.appengine.ext import db 

k = db.Key('agNiYXpyDAsSA2ZvbyIDYmFyDA') 
_app = k.app() 
path = [] 
while k is not None: 
    path.append(k.id_or_name()) 
    path.append(k.kind()) 
    k = k.parent() 
path.reverse() 
print 'app=%r, path=%r' % (_app, path) 

, bu çıkışlar: Örneğin

app=u'baz', path=[u'foo', u'bar'] 

istendiği gibi. aynı sonuçlarla

k = db.Key('agNiYXpyDAsSA2ZvbyIDYmFyDA') 
_app = k.app() 
path = k.to_path() 
print 'app=%r, path=%r' % (_app, path) 

: daha kısa bir alternatif Key örnekleri (ne yazık ki, inan kayıt dışı) to_path yöntemini kullanmaktır. Ancak, ilk, daha uzun sürüm sadece belgelenmiş yöntemlere dayanır.

+3

.to_path() belgelerinin olmaması bir hatadır - kesinlikle harici olarak kullanılması amaçlanmıştır. :) –

+1

El ile kodunu çözmeyi denemekten çok daha kolay! –

+1

@Nick, Bundan şüpheliyim, ama gerçekten yapmadım _know_! Yani, bilgi için tx. Neyse ki, sadece hızlı bir şekilde bir dokümantasyon hatası olacak gibi görünüyor. –

2

, liste olarak bir Key yolunu almak için Key.to_path() kullanın.

bir Geliştirme Konsolu çalıştırmak
from google.appengine.ext import db 
opaque_id = 'agNiYXpyDAsSA2ZvbyIDYmFyDA' 
path = db.Key(opaque_id).to_path()