Program Tip

엔터티 키를 사용하여 GQL에서 쿼리하는 방법

programtip 2020. 10. 26. 08:29
반응형

엔터티 키를 사용하여 GQL에서 쿼리하는 방법


Google App Engine 데이터 뷰어에서 GQL을 사용하여 엔티티 키에 대한 쿼리를 작성하려면 어떻게해야합니까?

뷰어에서 첫 번째 열 (Id / Name)은로 표시되고 name=_1세부 사항보기에서는 키가 다음과 같이 표시됩니다.

Decoded entity key: Programme: name=_1
Entity key: agtzcG9................... 

이 쿼리는 작동하지 않습니다.

SELECT * FROM Programme where name = '_1'

항목의 키를 사용하여 검색 할 수 있습니다.

SELECT * FROM Programme where __key__ = KEY('agtzcG9...................')

그리고 비슷한 이름을 사용하여 쿼리 할 수 ​​있어야합니다.

SELECT * FROM Programme where __key__ = KEY(Programme, '_1')

이는 AppEngine 애플리케이션에서 수행하려는 작업이 아닙니다. Nick이 자신의 의견에서 언급했듯이 엄청난 시간 낭비입니다. 이 예는 관리 콘솔에서 키로 쿼리하는 방법을 보여주기위한 것일뿐입니다.


숫자 ID의 경우 이름 별 쿼리와 유사한 형식이 작동합니다.

SELECT * from Programme where __key__ = KEY('Programme', 1234567)

이 양식은 관리 콘솔에서 특히 유용합니다.


키로 항목을 가져 오기 위해 쿼리 할 필요가 없습니다. 키로 항목을 가져 오기만하면됩니다. Python에서는 MyModel.get_by_key_name('_1'). 이것은 쿼리 사용에 대한 Adam의 제안보다 3 ~ 5 배 빠릅니다.


키로 쿼리 할 때 ID 또는 이름뿐만 아니라 부모를 포함하여 키를 정확히 일치시켜야합니다. 물론 위의 예에서와 같이 부모가 null이면 ID 또는 Name 및 엔티티 유형으로 충분합니다.

이미 인코딩 된 엔터티 키가있는 경우 다음과 같이 사용할 수 있습니다.

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')

부모 자체에 부모가있는 경우 해당 부모도 추가해야합니다. 자세한 내용은 공식 GQL 문서를 참조하십시오 .

부모에 관계없이 동일한 ID 또는 이름을 가진 모든 항목을 선택하는 방법이없는 것 같습니다.


이에 대한 간단한 참고 사항 : KEY의 인수 주위에 따옴표를 사용하면 호출이 실패합니다 (관리 콘솔에서 오류 팝업이 표시됨).

예를 들어 ID / 이름이 12345 인 "mytype"유형의 경우 작동 하지 않습니다 .

SELECT * FROM mytype WHERE __key__ = KEY('mytype', '12345')

그러나 이것은 다음을 수행합니다.

SELECT * FROM mytype WHERE __key__ = KEY(mytype, 12345)

참고 URL : https://stackoverflow.com/questions/1998084/how-do-i-query-in-gql-using-the-entity-key

반응형