Оператор IN
в GQL фактически синтезируется кодом Python уровня приложения как цикл, выполняющий серию =
выборок и их конкатенацию - на самом деле он не является частью возможностей основного хранилища и поэтому, к сожалению, подвержен некоторые ограничения (и его производительность никогда не бывает особенно хорошей). Я не уверен, что это было отличное дизайнерское решение - включить его в API-интерфейс Python (я полагаю, что оно не дублировалось в API Java), но вы здесь. (Кстати, у оператора !=
тоже есть похожие проблемы).
Я не уверен, почему, в частности, это должно мешать вашему предполагаемому использованию, но я подозреваю, что это связано с тем, что объект «запрос» является экземпляром datastore.MultiQuery, а не просто datastore.Query - что произойдет, если вы это сделаете в вашем собственном коде Python уровня приложения, что обычно делает код Python уровня приложения, предоставляемый GAE? Смотрите в вашем исходном файле SDK google / appengine / api / datastore.py, в частности, класс MultiQuery - в конце концов, он сводится к выполнению всех отдельных запросов и объединению их результатов (в порядке сортировки, если требуется, но это не так). похоже, дело именно в этом).