2010-01-06 59 views
9

我有一個大斑點財產User.image 具有這種性質在我的模型做了我的查詢需要太多的時間去在最後期限模型中取出一個屬性,所以我決定該財產進入另一個模型 - UserData - 誰的父母是用戶。從現有模型的實例

但是,現有的那些已經在數據存儲中仍包含圖像數據模型實例,即使模型定義不再包含屬性。

有什麼,辦法刪除用戶實例的數據?

回答

12

的回答你的問題記錄在這裏:

如果您從 模型刪除屬性,您:從「從數據庫中刪除已刪除屬性」部分https://developers.google.com/appengine/articles/update_schema

複製/粘貼會發現現有的 實體仍然有該屬性。其 仍將顯示在管理員 控制檯中,並且仍將出現在 數據存儲區中。要真正清除舊數據,您需要循環訪問 您的實體,並從 中刪除每個數據。

  1. 請確保您已從模型定義中刪除屬性。
  2. 如果你的模型類從db.Model繼承,暫時切換它 從db.Expando繼承。 (db.Model 實例不能動態修改 ,這是我們需要在下一步中做的 )。
  3. 通過現有實體循環(如上所述)。對於每個 實體,請使用delattr刪除 陳舊的屬性,然後保存 實體。
  4. 如果模型最初是從db.Model繼承,不要忘記 更新所有 數據後改回。
+0

什麼是'delattr'的Java等價物? – Price 2015-01-15 05:36:27

+0

明白了 - 它是'Entity.removeProperty' – Price 2015-01-15 05:45:13

0

我沒有現在測試了這一點手段,但我會嘗試設置圖像屬性設置爲null或無(不知道,如果你正在使用Java或Python),而過渡到使用的UserData類。您可以在代碼中以內聯方式執行此操作,作爲棄用該屬性的一種方式,或者可以設置一次完成此操作的cron作業。我不確定是否有更好的方法從實體中完全刪除圖像屬性,但這至少可以解決您加載時間的問題。