Trong GQL reference, nó được khuyến khích sử dụng các từ khóa IN
với một danh sách các giá trị, và để xây dựng một chính từ tay các truy vấn GQLGQL Query với __key__ trong danh sách các phím
SELECT * FROM MyModel WHERE __key__ = KEY('MyModel', 'my_model_key')
sẽ thành công. Tuy nhiên, sử dụng mã bạn mong chờ để làm việc:
SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'),
KEY('MyModel', 'my_model_key2'))
trong Viewer Datastore, có một lời phàn nàn của "chuỗi truy vấn GQL không hợp lệ."
Cách chính xác để định dạng truy vấn như vậy là gì?
CẬP NHẬT: Không thể thực hiện điều này với SDK hiện tại. Như tôi lưu ý trong nhận xét của mình, khi sử dụng danh sách, chỉ một tham chiếu (ví dụ: :1
hoặc :email
) hoặc một int, float, string, boolean hoặc null literal là các mục nhập danh sách có thể chấp nhận được.
CẬP NHẬT CẬP NHẬT: Tôi đã sửa lỗi và bây giờ có thể thực hiện các truy vấn đó. Bạn có thể tìm thấy bản sửa lỗi trong Google Code Hosting diff.
PS Tôi biết có nhiều cách hiệu quả hơn để thực hiện điều này bằng Python (không cần xây dựng truy vấn GQL) và sử dụng remote_api, nhưng mỗi cuộc gọi đến remote_api đều tính vào hạn ngạch. Trong một môi trường mà hạn ngạch không phải là (nhất thiết) miễn phí, truy vấn nhanh chóng và bẩn là rất hữu ích.
Bạn có thực sự nghĩ rằng số lượng thực thể bạn tìm nạp bằng tay trong bảng điều khiển sẽ thêm vào số lượng hạn ngạch tiêu thụ đáng kể nếu bạn đã thực hiện thông qua remote_api? –
No. Một lần nữa, tôi chỉ tự hỏi làm thế nào để cấu trúc truy vấn một cách chính xác. Đoạn thứ hai trong bài đăng của tôi có vẻ như không phải là "chuỗi truy vấn GQL không hợp lệ". Có phải trường hợp 'WHERE __key__ IN' là GQL không hợp lệ không? – bossylobster
Tôi vẫn còn bối rối tại sao bạn muốn làm điều này, mặc dù. Đó là một cách đặc biệt không hiệu quả để tìm nạp các thực thể. –