2010-10-06 2 views
34

Tôi muốn tạo truy vấn GQL để lấy đối tượng bằng cách sử dụng id số của nó. Tôi đang làm điều này trong trình xem Datastore trong bảng điều khiển quản lý ứng dụng, vì vậy tôi không thể sử dụng Model.get_by_id (numeric_id). Một cái gì đó nhưTruy vấn GQL có id số trong trình xem kho dữ liệu

SELECT * FROM Model WHERE id = <numeric_id> 

cũng không hoạt động.

Trả lời

73

Hãy thử điều này:

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>) 
+0

Cảm ơn, nó hoạt động! –

+4

GQL! Làm thế nào bạn có thể không thích nó./irony – Nilzor

+0

Điều đó làm khớp đầy đủ trên khóa thay vì chỉ là phần ID của khóa. Tôi muốn có được tất cả các thực thể với id số đã cho, không chỉ là một thực thể không có cha mẹ. – aij

0

Trong trường hợp của tôi, tôi đã phải thay đổi loại ID từ String để lâu

5

Thật không may, có vẻ không phải là một cách để viết một tương đương truy vấn để

SELECT * FROM Model WHERE id = <numeric_id> 

sẽ chọn tất cả các đối tượng Mô hình có id đã cho. Nếu bạn ok với một cái gì đó tương đương với

SELECT * FROM Model WHERE id = <numeric_id> AND parent IS NULL 

bạn có thể sử dụng giống như

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>) 

Nếu pháp nhân của bạn không có cha mẹ mặc dù, bạn sẽ cần phải xác định đó là một phần của chìa khóa, như

SELECT * FROM Model where __key__ = KEY('ParentModel', <parent_name_or_id>, 'Model', <numeric_id>) 

Nếu chính cha mẹ có cha mẹ, bạn cũng sẽ cần chỉ định điều đó. (Ông bà đi bên trái của phụ huynh, v.v.)

Tất nhiên nếu bạn không bị giới hạn đối với GQL (như nếu bạn đang sử dụng Python, Go hoặc Java), bạn có thể truy vấn các khóa, giải mã chúng và lọc theo id, sau đó tìm nạp các thực thể tương ứng. Nhưng tất nhiên điều đó không làm việc trong Datastore Viewer vì bạn chỉ có thể sử dụng GQL.

3

Một cách khác xung quanh là, lần đầu tiên có được chìa khóa cho các đơn vị sử dụng id bởi

key = db.Key.from_path('Model', int(id)) 

sau đó nhận đối tượng bằng cách

obj = db.get(key) 

Ưu điểm là, bạn không cần phải làm bất cứ định dạng chuỗi.

tham chiếu: vấn đề đặt 3 tại khóa học này, https://classroom.udacity.com/courses/cs253/

+0

Bạn nên loại bỏ '.' sau 'from_path' là lỗi cú pháp. Nó hoạt động theo cách khác mặc dù – xerotolerant