2012-10-02 30 views
13

trong ứng dụng của tôi, tôi cần xóa một vài thuộc tính mô hình của mình.
tôi đã kiểm tra this link nhưng vấn đề đầu tiên là các thuộc tính nằm trên polymodel và không có cách nào im chuyển sang số expando để xóa thuộc tính, thậm chí không làm hỏng điều gì có thể xảy ra nếu tôi thay đổi polymodel đến một số expando.cách xóa sạch thuộc tính ndb

vậy làm cách nào để xóa thuộc tính khỏi các thực thể hiện tại?

tôi đã suy nghĩ để đặt tất cả StringProperty thành None và sau đó xóa chúng khỏi lược đồ mô hình và triển khai lại. một trong các thuộc tính đó là BooleanProperty, tôi không thể đặt thuộc tính này thành None đúng ?! hoặc ndb.PickleProperty ... tôi nên xóa nội dung đó như thế nào?

có ai biết cách thực hiện việc này đúng cách không?

Trả lời

33

Nếu bạn muốn cập nhật tất cả các thực thể của bạn, cách tiếp cận được khuyến nghị là một công việc bản đồ/giảm mà đọc và viết lại tất cả các thực thể; tuy nhiên nó có thể không đáng, tùy thuộc vào lượng dữ liệu bạn có - bản đồ/giảm không miễn phí.

Ngoài ra, hãy chắc chắn bạn kiểm tra công việc bản đồ/giảm trên một tập hợp con nhỏ dữ liệu. Thật là tinh tế để thực sự loại bỏ một tài sản từ một thực thể, ngay cả khi nó không còn trong lớp mô hình nữa! Cách tiếp cận tốt nhất có thể là:

if 'propname' in ent._properties: 
    del ent._properties['propname'] 
    ent.put() 
+0

thx guido! có tôi phải đánh giá nếu giá trị thực sự của nó ... tôi có khoảng 100k thực thể để nó có thể được ngay cả ok để loại bỏ các tài sản từ giản đồ. điều gì xảy ra nếu tôi loại bỏ tài sản, triển khai lại và sau đó có uy tín thực thể? điều này sẽ loại bỏ những thuộc tính hoặc tôi vẫn cần phải loại bỏ chúng khỏi đối tượng? – aschmid00

+6

Việc đóng lại sau khi thay đổi lược đồ không loại bỏ giá trị thuộc tính. (Đây là một tính năng có chủ ý nhằm tối đa hóa khả năng tương tác giữa hai phiên bản của một ứng dụng.) –

+0

ok tốt để biết. – aschmid00

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