Google App Engine 데이터 뷰어에서 GQL을 사용하여 엔터티 키에 대한 쿼리를 작성하려면 어떻게해야합니까?엔터티 키를 사용하여 GQL에서 쿼리하는 방법
SELECT * FROM Programme where name = '_1'
Google App Engine 데이터 뷰어에서 GQL을 사용하여 엔터티 키에 대한 쿼리를 작성하려면 어떻게해야합니까?엔터티 키를 사용하여 GQL에서 쿼리하는 방법
SELECT * FROM Programme where name = '_1'
당신에게 : 세부 사항에 name=_1
로
에게, 첫 번째 열 (ID/이름) 표시, 그것은이 쿼리가 작동하지 않습니다
Decoded entity key: Programme: name=_1
Entity key: agtzcG9...................
로 키를 보여줍니다보기 엔티티의 키를 사용하여 검색 할 수 있습니다.
SELECT * FROM Programme where __key__ = KEY('agtzcG9...................')
그리고 검색 할 수 있어야합니다. 비슷하게 이름을 사용 :
SELECT * FROM Programme where __key__ = KEY(Programme, '_1')
이것은 당신이 AppEngine 응용 프로그램에서하고 싶은 것이 아닙니다. Nick이 그의 코멘트에서 언급했듯이, 그것은 거대한 시간 낭비입니다. 이 예는 관리 콘솔에서 키로 검색어를 찾는 방법을 보여주는 데 유용합니다.
키를 사용하여 엔티티를 가져 오지 않고도 쿼리 할 수 있습니다. 단순히 키를 사용하여 엔티티를 가져올 수 있습니다. 파이썬에서는 MyModel.get_by_key_name('_1')
으로이 작업을 수행 할 수 있습니다. 이것은 Adam이 제안한 쿼리 사용보다 3 ~ 5 배 빠릅니다. 숫자 ID에 대한
그것은 내 제안이 아니 었어, 닉, 나는 그의 쿼리 작업을 돕기 위해 노력했다. 나는 그가 관리 콘솔 데이터 뷰어에서 사물을 보려고한다고 생각한다. –
@ Nick + Adam : 예, 관리 콘솔에서 일부 데이터를 검토하려고했습니다. – Thilo
레코드의 경우,'__key__' 쿼리는 실제로 일반적으로 엔티티 테이블 자체에서 직접 읽습니다. 직접적으로 인덱스 대신 엔티티 테이블을 먼저 읽습니다. 실제로 데이터 저장소가이 쿼리를 원시 bigtable 조회 나 스캔으로 컴파일 할 때'__key__ =='쿼리와'get()'사이에는 큰 차이가 없습니다. 물론 이것은 구현 세부 사항입니다. 하나의 엔티티를 찾을 때마다'get()'을 사용하는 것은 여전히 좋은 습관이다. – ryan
쿼리별로 이름과 유사한 형태로 작동 :
SELECT * from Programme where __key__ = KEY('Programme', 1234567)
내가 관리 콘솔에서 특히 유용이 양식을 발견했다.
키를 사용하여 쿼리 할 때 ID 또는 이름뿐만 아니라 부모를 포함하여 키를 정확히 일치시켜야합니다. 물론 위의 예에서와 같이 부모가 null 인 경우 ID 또는 이름과 엔터티 유형만으로 충분합니다.
당신은 이미 인코딩 된 엔티티 키가있는 경우, 당신은 사용할 수 같은 :
위의 간단한 예를 들어SELECT * FROM Programme where __key__ = KEY('agtzcG9...................')
,
SELECT * FROM Programme where __key__ = KEY('Programme', '_1')
할 것입니다,하지만 당신의 키는 부모가있는 경우 ,
Paren: id=123
처럼 그런 다음 쿼리는 것
SELECT * FROM Programme where __key__ = KEY('Paren', 123, 'Programme', '_1')
부모에게 부모가있는 경우 추가해야합니다. 자세한 내용은 official GQL documentation을 참조하십시오.
부모와 관계없이 동일한 ID 또는 이름을 가진 모든 것을 선택하는 방법이없는 것처럼 보입니다.
KEY의 모든 args를 따옴표로 묶을 때 호출이 실패합니다 (관리 콘솔에서 오류 팝업이 표시됨).
SELECT * FROM mytype WHERE __key__ = KEY('mytype', '12345')
하지만이 작업을 수행합니다 :
예를 들어, ID/이름 12345와 유형 "MYTYPE"에 대한,이 하지를 작동합니까
SELECT * FROM mytype WHERE __key__ = KEY(mytype, 12345)
아아, 아니. 이것은 _huge_ 시간과 자원 낭비입니다. –
@ 닉 :하지만 관리 콘솔에는 더 좋은 방법이 없을 것입니다. – Thilo
죄송합니다, 실수. :/ –