1

我有一个现有的架构:

class Example (db.Model) :
 row_num = db.IntegerProperty(required=True)
 updated = db.IntegerProperty()
 ...
 ...

我现在已将其更新为:

class Example (db.Model) :
 row_num = db.IntegerProperty(required=True)
 updated = db.IntegerProperty(default=0)
 ...
 ...

但是,Datastore 中有超过 200 万个实体默认没有设置 update = 0。

最简单的方法是什么?这可以通过管理终端的单个命令完成吗?

4

1 回答 1

2

您需要编写一个脚本来遍历对象,抓取它们(一次最多 1000 个),更新它们的属性值,然后将它们保存回来。

不,相对于标准 SQL DB 做同样的事情(你可以只发出一个单一的UPDATE),这并不是真正有效的,但是 BigTable(GAE 数据存储背后的支持技术)不是 SQL 关系数据库 - 它完全是一个不同的架构旨在擅长不同的事情,并且没有针对一次更新数百万行的单个字段进行优化 - 因此GQL 语法没有UPDATE语句的概念。

编辑:

正如 David 在评论中亲切地指出的那样,谷歌最近发布了Mapper API,可以用来帮助解决这个问题。

于 2010-07-26T04:45:04.000 回答