我对GAE数据库中的更新字段有疑问。我的问题看起来像这样:
class A(db.Model):
a = db.StringProperty()
我添加了bool字段:
class A(db.Model):
a = db.StringProperty()
b = db.BooleanProperty(default=False)
现在我的问题是我希望模型b == False的每个实例。
要更新它,我当然可以将它们拖出数据存储区并将它们放回那里,但那里已有700k元素,我真的不知道如何有效地完成它。我不能马上拿出来因为我得到了软内存超出错误。如果我尝试用很少的块来做这件事 - 我花了很多数据库读取操作。你知道我怎么能更新我的数据存储区吗?
干杯
答案 0 :(得分:2)
我同意@ShayErlichmen。但是,如果您真的想要更新每个实体,最简单的方法是使用MapReduce库: http://code.google.com/p/appengine-mapreduce/
它并不像听起来那么容易,因为文档很糟糕,但这是入门点: http://code.google.com/p/appengine-mapreduce/wiki/GettingStartedInPython
你只需编写一个函数foo()来检查传递给它的每个实体的值,如果有必要,写一下更新你的布尔值,并写下它。
库将获取批量实体并将每个批次发送到单独的任务。每个任务都将在一个循环中运行,调用你的函数foo()。请注意,批次并行运行,因此它可以并行启动几个实例,但它往往很快。
答案 1 :(得分:1)
您的新属性可以处于以下三种状态之一:None,False和True。只需在代码中将None视为False,就不会有更新。