ReferenceProperty rất hữu ích trong việc xử lý các tham chiếu giữa hai mô-đun. Fox dụ:db.ReferenceProperty() vs ndb.KeyProperty trong App Engine
class UserProf(db.Model):
name = db.StringProperty(required=True)
class Team(db.Model):
manager_name = db.ReferenceProperty(UserProf, collection_name='teams')
name = db.StringProperty(required=True)
- Để có được 'MANAGER_NAME' với dụ đội bóng, chúng tôi sử dụng team_ins.manager_name.
- Để nhận 'các nhóm' được quản lý bởi cá thể người dùng cụ thể, chúng tôi sử dụng user_instance.team và lặp lại.
Trông nó có dễ dàng và dễ hiểu không?
Khi làm điều tương tự sử dụng NDB, chúng ta phải sửa đổi
db.ReferenceProperty (UserProf, collection_name = 'đội') -> ndb.KeyProperty (loại = UserProf)
- team_ins. manager_name.get() sẽ cung cấp cho bạn tên người quản lý
để có được tất cả các đội bóng mà là máng cỏ bằng cách dùng cụ thể, chúng ta phải làm
cho đội trong Team.query (Team.manager_name == user_ins.key): (Định dạng mới là không làm việc ở đây)
print "team name:", team.name
Như bạn thấy xử lý các loại kịch bản trông dễ dàng hơn và có thể đọc được trong db hơn NDB.
- Lý do xóa ReferenceProperty trong ndb là gì?
- Ngay cả truy vấn của người dùng db user_instance.teams cũng sẽ làm điều tương tự như được thực hiện trong vòng lặp của ndb. Nhưng trong ndb, chúng tôi đang đề cập một cách rõ ràng sử dụng cho vòng lặp.
- Điều gì đang xảy ra sau hậu trường khi chúng tôi thực hiện user_instance.teams?
Thanks in advance ..
Cảm ơn. ndb cũng giống như db nhưng rõ ràng và người dùng sẽ biết rằng có hoạt động get(). Không có cải thiện hiệu suất trong trường hợp này. Tôi đã đọc về ndb async, chưa sử dụng nó. – rajpy
@Tim và Guido, Bạn có thể đề xuất bất kỳ ứng dụng mẫu nào được viết bằng ndb tương tự như ứng dụng mẫu trong http://code.google.com/p/google-app-engine-samples/. Và cũng thực hành tốt nhất để làm theo trong các ứng dụng dựa trên ndb. Nó sẽ giúp đỡ rất nhiều. Cảm ơn. – rajpy
Gọi 'entity.keyproperty.get(). Somevalue1' sẽ tìm nạp đối tượng được tham chiếu bởi' keyproperty' lần đầu tiên, trong 'entity.keyproperty.get() sau đó' somevalue2' và 'entity.keyproperty.get(). Somevalue3' sẽ không thực hiện cuộc gọi db ??? –