GAE python在数据库中更新

时间:2012-10-12 21:15:14

标签: python google-app-engine google-cloud-datastore

我对GAE数据库中的更新字段有疑问。我的问题看起来像这样:

class A(db.Model):
    a = db.StringProperty()

我添加了bool字段:

class A(db.Model):
    a = db.StringProperty()
    b = db.BooleanProperty(default=False)

现在我的问题是我希望模型b == False的每个实例。

要更新它,我当然可以将它们拖出数据存储区并将它们放回那里,但那里已有700k元素,我真的不知道如何有效地完成它。我不能马上拿出来因为我得到了软内存超出错误。如果我尝试用很少的块来做这件事 - 我花了很多数据库读取操作。你知道我怎么能更新我的数据存储区吗?

干杯

2 个答案:

答案 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,就不会有更新。

相关问题