2010-06-30 4 views
6

Google App Engine에서 엔티티에 키가 있습니다. 경로에서 키를 만들 수 있습니다.이 경우 str (key)는 불투명 한 16 진수 문자열입니다. 예 : 코드를 실행하려면 오른쪽 경로를 설정 한 경우Google App Engine 엔티티를 디코딩하는 방법 파이썬에서 키 경로 str?

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

agNiYXpyDAsSA2ZvbyIDYmFyDA 

을 제공합니다.

그래서 어떻게 16 진수 문자열을 가져 와서 경로를 되 찾을 수 있습니까? 나는 대답이 Key 또는 entity group 워드 프로세서에있을 것이라고 생각했지만 그것을 볼 수 없다.

+0

생성자 (http://code.google.com/appengine/docs/python/datastore/keyclass.html#Key)를 사용하여 키를 다시 가져올 수 있습니다. 키에서 경로를 다시 얻는 방법을 잘 모르겠습니다. – hwiechers

+0

이 도구를 사용하여 특정 키 (http://datastore-key.appspot.com/)를 볼 수 있습니다. 또한 JSON 출력을 통해 서비스로 작동합니다. – Deleplace

답변

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) 

이 출력 : 예를 들어

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

의 요청에 따라. 같은 결과

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

: 더 짧은 대안은 Key 인스턴스 (불행하게도, 내가 믿는, 문서화되지 않은) to_path 방법을 사용하는 것입니다. 그러나 첫 번째, 긴 버전은 문서화 된 방법에만 의존합니다.

+3

.to_path()에 대한 문서 부족으로 인해 버그가 발생했습니다. 이것은 외부 적으로 사용되도록 의도되었습니다. :) –

+1

확실히 수동으로 해독하는 것보다 훨씬 쉽습니다! –

+1

@ 닉, 나는 의심 스럽지만 실제로는 알지 못했습니다! 그래서, tx 정보. 다행히도 빠른 문서화 버그 일뿐입니다. –

2

Key 개체 (해당 불투명 식별자를 생성자에 전달하여 만들 수 있음)를 얻은 후에는 Key.to_path()을 사용하여 Key의 경로를 목록으로 가져옵니다.

개발 콘솔에서 실행
from google.appengine.ext import db 
opaque_id = 'agNiYXpyDAsSA2ZvbyIDYmFyDA' 
path = db.Key(opaque_id).to_path()