GAE:如何更新“缺失”字段?

时间:2013-10-30 21:28:46

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

我在记录中引入了一个名为timestamp的新字段。现在我想查看所有旧记录并设置该值。

我创建了一个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:没有抓住它们。

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

1 个答案:

答案 0 :(得分:0)

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

不存在不存在的字段,因此您无法基于该字段进行查询,但是一旦您实际获得了该实体,您可以检查该字段是否缺失:

if rec.timestamp == None: