2011-11-29 13 views
5

W GQL reference, to zaleca się użyć słowa kluczowego IN z listy wartości i skonstruować klucz z ręki zapytanie GQLGQL Query z __key__ w listę kluczy

SELECT * FROM MyModel WHERE __key__ = KEY('MyModel', 'my_model_key') 

uda. Jednak przy użyciu kodu można oczekiwać, aby pracować:

SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'), 
             KEY('MyModel', 'my_model_key2')) 

w magazynie danych Viewer, jest skarga „Nieprawidłowy ciąg kwerendy GQL”.

Jaki jest prawidłowy sposób sformułowania takiego zapytania?

AKTUALIZACJA: Nie można tego zrobić z bieżącym zestawem SDK. Jak zauważam w moim komentarzu, przy korzystaniu z listy dopuszczalne są jedynie pozycje odniesienia (np. :1 lub :email) lub int, float, string, boolean lub null dosłowny.

DRUGA AKTUALIZACJA: Naprawiłem błąd i można teraz wykonywać takie zapytania. Naprawa można znaleźć w Google Code Hosting diff.

PS Wiem, że są bardziej wydajne sposoby na to w Pythonie (bez tworzenia kwerendy GQL) i przy użyciu remote_api, ale każde wywołanie remote_api liczy się z przydziałem. W środowisku, w którym limit nie jest (koniecznie) bezpłatny, szybkie i brudne zapytania są bardzo pomocne.

+0

Czy naprawdę sądzisz, że liczba elementów, które pobierasz ręcznie w konsoli, zwiększy znaczną ilość zużytego limitu, jeśli zrobisz to za pomocą remote_api? –

+0

No Ponownie, właśnie zastanawiam się, jak poprawnie ułożyć zapytanie. Drugi fragment w moim poście wygląda na to, że nie byłby to "niepoprawny ciąg zapytania z GQL". Czy jest tak, że "WHERE __key__ IN" jest nieprawidłowym GQL? – bossylobster

+0

Wciąż jestem zdezorientowany, dlaczego chcesz to zrobić. Jest to szczególnie nieefektywny sposób pobierania obiektów. –

Odpowiedz

1

Po fix został wdrożony, fragment kodu z oryginalnego postu wystarczy:

SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'), 
             KEY('MyModel', 'my_model_key2')) 

PS I zrozumiał mój komentarz do oryginalnego wpisu nie może być wystarczająco jasne, jako odpowiedź na przyszłych widzów.

2

Nie rozumiem. Twoim celem jest wyświetlenie określonej listy jednostek w przeglądarce Datastore Viewer, aby uniknąć zużycia przydziału? Nie wiem o sposób to zrobić z GQL, ale można uzyskać dostęp bezpośrednio podmiotom, jeśli znasz ich kluczy, np

https://appengine.google.com/datastore/edit?app_id=myapp&key=key1

https://appengine.google.com/datastore/edit?app_id=myapp&key=key2

jeśli robisz to w kodzie , nie próbuj używać GQL. Użyj db.get(keys) lub czegoś podobnego.

+0

Nie mam żadnych problemów przy użyciu 'db.get' lub' MyModel.get_by_key_name' lub 'MyModel.get_by_id'. Pytanie było napędzane pragnieniem dowiedzenia się, jak można to zrobić. Nawet wykonywanie indywidualnych zapytań (jak w przypadku 'klucz =' w ciągu zapytania) może być wykonane za pomocą 'SELECT * FROM MyModel WHERE __key__ = KEY (" MyModel "," my_model_key ")', jak już wspomniałem. – bossylobster

Powiązane problemy