2012-04-05 30 views
8

Tôi đang cố gắng tải một thực thể bằng khóa bằng cách sử dụng id được gán bởi kho dữ liệu nhưng tôi không thấy bất kỳ phương thức api nào để thực hiện điều này (sử dụng NDB). Tôi nghĩ rằng tôi sẽ có thể làm cho một Key từ một số nguyên id và sử dụng key.get() để tải các thực thể, nhưng tôi không thấy một cách để làm cho một khóa từ chỉ là một id. Tôi nghi ngờ tôi đang thiếu một cái gì đó hiển nhiên ở đây. Làm thế nào tôi nên tải một thực thể mà tôi chỉ biết id của nó?công cụ ứng dụng ndb - làm cách nào để tải thực thể theo khóa bằng id?

Trả lời

23

YourModel.get_by_id() lấy phiên bản mẫu theo id.

đây các tài liệu:
https://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_by_id

không nghĩ rằng bạn không thể có được một tổ chức bởi id mà không biết loại vì trường hợp của lớp mẫu khác nhau có thể có cùng một id/KEY_NAME

+0

Cảm ơn, đó chính xác là những gì tôi đang tìm kiếm. Không chắc chắn làm thế nào tôi bị mất trong tài liệu. – user605331

+2

Tôi nghĩ rằng các tài liệu là sai, tôi không thể làm điều này để làm việc cho cuộc sống của tôi, nhưng sau đó tôi nhận thấy tôi đã đi qua một str để chuyển id dài sang một int đã làm các trick, mặc dù các tài liệu dẫn bạn đến tin rằng bạn có thể sử dụng một str này không phải là giữ đúng ít nhất là không phải trên phiên bản ứng dụng máy chủ ứng dụng máy chủ dev địa phương 1.8.9. Một khi tôi đã làm một int (id_str) nó làm việc tốt. – Shaun

+1

@Shaun tôi không nghĩ rằng tài liệu là sai. nếu id của bạn là 'int' thì bạn sẽ phải truyền vào' int' và nếu nó là 'str' thì nó phải là' str'. – aschmid00

22

Một cách: ndb.Key(YourModel, id).get().

0

Các mô hình trong NDB không xác định loại khóa của chúng như là một phần của mô hình. Điều này tiện lợi ở chỗ bạn có thể có một kiểu mẫu nhất định có thể truy cập thông qua nhiều loại khóa và cha mẹ khác nhau, điều này làm cho chúng trở nên linh hoạt hơn. Nhưng nó có phần vấn đề bởi vì nó không phải luôn luôn rõ ràng những gì chính đại diện hoặc nơi nó đến từ.

Vì vậy, trong trường hợp chỉ có bao giờ một loại chìa khóa cho một mô hình nhất định (đó là gần như mỗi mô hình), tôi muốn tạo ra một phương pháp học để tạo ra các phím đó, có thêm một chút rõ ràng ngữ nghĩa :

class Book(ndb.Model): 
    title = ndb.StringProperty() 
    pages = ndb.IntegerProperty() 
    @classmethod 
    def make_key(cls, isbn): 
    return ndb.Key(cls, isbn) 

b = Book.make_key('1234-5678').get() 

Chắc chắn mã bổ sung không thực sự cần thiết, nhưng nó cho biết rõ ràng và làm cho mô hình của tôi bền vững hơn.

Các vấn đề liên quan