2013-10-30 96 views
0

我在我的记录中引入了一个名为timestamp的新字段。现在我想浏览所有的旧记录并设置该值。GAE:如何更新'缺少'字段?

我创建了一个REST调用并成功对它进行了单元测试。我也在本地开发环境中运行它,它工作。

@requires_auth 
def get(self): 
    user = User.query(User.email == request.authorization.username).fetch(1)[0] 
    if user and user.email == Config.ADMIN_EMAIL_SHORT: 
     users = User.query() 
     records = [] 
     for user in users: 
      user_records = Record.query(Record.user == user.key) 
      for rec in user_records: 
       if rec.timestamp == 0: 
        midnight_dt = set_time_to_midnight(rec.record_date) 
        rec.timestamp = create_timestamp(midnight_dt) 
        records.append(rec) 
     ndb.put_multi(records) 
     return 'Migration complete', 200 
    else: 
     return 'Sorry. You have no permission.', 403 

然而,一旦我部署它,尽管成功的消息,并在日志文件中没有任何异常的错误,我仍然有旧的时间戳。然后我意识到了原因。

NoSQL的本质意味着那些领域甚至还没有那么明显。因此,我的条件if rec.timestamp == 0:没有抓住他们。

如何在记录对象中搜索时间戳记字段?

回答

0

我投票结束,但我后来意识到你的问题不是重复。

不存在的领域是不存在的,所以你不能根据该字段查询,但一旦你真正得到那么实体,你可以检查该字段缺少:

if rec.timestamp == None: 
+0

呀,相关问题宣称没有解决方案。但您的解决方案效果很好。非常感谢。 :)你总是可以关闭一个问题,所以我相信。 – Houman

+0

在没有有效的方法来做这件事的意义上,“没有解决方案”。唯一的方法(特别是当你有很多实体时)是让所有的实体从一个任务队列分页,直到你全部处理它们。想象一下,你有1000万个实体,只有一个实体失踪了,你仍然需要全部找到那个实体。 –