2013-10-30 38 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萬個實體,只有一個實體失蹤了,你仍然需要全部找到那個實體。 –