代码之家  ›  专栏  ›  技术社区  ›  Eran Kampf

从现有模型实例中删除特性

  •  9
  • Eran Kampf  · 技术社区  · 16 年前

    我有一个带有大blob属性User.image的模型 在我的模型中有这个属性会使我的查询花费太多的时间并超过最后期限,所以我决定将这个属性移动到另一个模型中——UserData——谁的父对象就是用户。

    但是,数据存储中已有的现有模型实例仍然包含该图像数据,即使模型定义不再包含该属性。

    有没有办法从用户实例中删除该数据?

    2 回复  |  直到 16 年前
        1
  •  12
  •   James Franck    12 年前

    您问题的答案记录在此处: https://developers.google.com/appengine/articles/update_schema

    从“从数据存储中删除已删除的属性”部分复制/粘贴:

    模型,您将发现现有的 实体仍然拥有该属性。信息技术 仍将显示在管理中 数据存储。要真正清理干净 旧数据,您需要循环使用 并从中删除数据

    1. 如果您的模型类继承自db.model,请临时切换它 从db.Expando继承(数据库模型 动态地,这是我们需要做的
    2. 实体,使用delattr删除 属性,然后保存 实体。
    3. 要在更新所有
        2
  •  -1
  •   Sean Devlin    16 年前

    我现在没有办法测试这个,但是我会尝试在转换到使用UserData类时将image属性设置为null或None(不确定您是否使用Java或Python)。您可以在代码中内联执行此操作,作为不推荐属性的一种方式,或者您可以设置一个cron作业来同时执行此操作。我不确定是否有更好的方法从实体中完全删除image属性,但这至少可以解决加载时间的问题。