我使用以下方法保存数据存储区中的一个字段:
self.user.expiration_date = datetime.datetime.utcnow() + datetime.timedelta(days=31)
self.user.put()
我正在使用Webapp2。保存用户到期日期后,我将用户重定向到一个方法,其中写入以下代码。
user = User.all().filter('email =', self.session.get('email'))
digest = self.session.get('passwd').encode('utf-8', 'ignore')
user = user.filter('passwd =', digest).get()
self.user = user
然而,在此之后,当我检查expiration_date时,它的Null或之前的值。
我该怎么做才能获得正确的价值?
答案 0 :(得分:1)
您正在NoSQL数据存储中看到最终一致性的影响。这部分解释了什么。 https://cloud.google.com/datastore/docs/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore/#h.w3kz4fze562t
基本上,在写入实体和查询将看到这些写入之间会有一点延迟。如果您通过其密钥重新获取实体,则可以避免此问题。
如果您可以使用User.all()
来电替换User.get_by_id()
查询,然后比较user.email == session.get('email') and user.password == digest
,那么您可以避免这种情况。