gpt4 book ai didi

database - 如何从 GAE 数据存储中删除列(属性)?

转载 作者:太空狗 更新时间:2023-10-30 01:45:19 26 4
gpt4 key购买 nike

我有一个持久类存储在 GAE 数据存储中。我已经从类中删除了一个属性。此表中的新记录显示值 <none > 用于删除的属性。但是有没有办法可以完全将这一列从表中删除?

谢谢。

根据 moraes 的建议添加了以下“迁移”代码,但没有达到预期的结果:

PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Query q = pm.newQuery(UserLogin.class);
Collection<UserLogin> list = (Collection<UserLogin>) q.execute();

Iterator<UserLogin> iter = list.iterator();
while (iter.hasNext()) {
UserLogin obj = (UserLogin) iter.next();
obj.setLoginDate(obj.getLoginDate());
}

pm.makePersistentAll(list);

} finally {
pm.close();
}

最佳答案

我在这篇文章中找到了这个问题的答案: http://code.google.com/appengine/articles/update_schema.html

"从数据存储中删除已删除的属性

如果您从模型中删除一个属性,您会发现现有实体仍然具有该属性。它仍将显示在管理控制台中,并且仍将存在于数据存储中。要真正清除旧数据,您需要循环遍历实体并从每个实体中删除数据。

  • 确保您已从模型定义中删除属性。

  • 如果您的模型类继承自 db.Model,请暂时将其切换为继承自 db.Expando。 (db.Model实例不能动态修改,这是我们下一步要做的。)

  • 循环遍历现有实体(如上所述)。对于每个实体,使用 delattr 删除过时的属性,然后保存实体。

  • 如果您的模型最初是从 db.Model 继承的,请不要忘记在更新所有数据后将其改回。"

下面是一个代码示例: http://sandrylogan.wordpress.com/2010/12/08/delattr/

关于database - 如何从 GAE 数据存储中删除列(属性)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6015399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com