开发者

Most efficient way to iterate through entire datastore and set a default value to a modified schema?

开发者 https://www.devze.com 2023-01-09 07:59 出处:网络
I have an existing schema: class Example (db.Model) : row_开发者_Go百科num = db.IntegerProperty(required=True)

I have an existing schema:

class Example (db.Model) :
 row_开发者_Go百科num = db.IntegerProperty(required=True)
 updated = db.IntegerProperty()
 ...
 ...

I have now updated this to :

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

However, there are over 2 million entities in the Datastore which do not have update = 0 set by default.

What is the easiest way to do this? Can this by done by a single command from the admin terminal?


You'll need to write a script that iterates through the objects, grabbing them (up to 1000 at a time), updating their property value, and then saving them back.

No, this is not really efficient relative to a standard SQL DB doing the same kind of thing (where you could just issue a single UPDATE), but BigTable (the backing technology behind the GAE Datastore) is not a SQL relational database - it's an entirely different architecture designed to be good at different things and not optimized for updating a single field across millions of rows at a time - hence why GQL syntax has no notion of an UPDATE statement.

Edit:

As David kindly pointed out in comments, Google recently released the Mapper API which can be used to assist with this.

0

精彩评论

暂无评论...
验证码 换一张
取 消