我刚刚开始遇到这个问题。我没有改变任何东西,但突然之间看起来在更改值后执行put后,当我稍后在数据库中查找或在控制台中执行查询时,该值不会持续存在。但这只会发生在某些时候。
所以我有这样的模型:
class User(IXBase, flask_security.UserMixin):
.....
current_challenge = ndb.IntegerProperty(default=1)
我已将日志添加到_post_put_hook并打印出值。我在那里看到了EXPECTED值(在本例中是current_challenge的5)
User(key=Key('User', 'o@k.ay'), active=True, created=datetime.datetime(2015, 7, 15, 2, 2, 25, 854790), current_challenge=5,
但是,如果我打印出这个值,我有时会看到之前的值。 (在这种情况下,我看到4)。但有时我只看到前一个值,有时它会正确递增,但它似乎刚刚开始发生,而且我可以告诉我没有改变任何东西。
因此,如果我这样做,似乎该值不会被保存。
u = ndb.Key('User', 'o@k.ay').get()
print u.current_challenge
有关如何发生这种情况的任何想法?我可以发布更多代码。
但这是负责增加挑战的代码:
def increment_challenge(self, session):
self.current_challenge += 1
self.put()
return
这从端点调用,如:
@blueprint.route('/upload_report', methods=['POST'])
@flask_security.roles_required('user')
def upload_session_report():
user = flask_login.current_user
updated_challenge = user.update_challenges()
update_challenges做了一些其他计算,并确定它是否应该调用增量质询(这也是“用户”的方法)
任何帮助都会很棒!
答案 0 :(得分:0)
使用transaction:
@ndb.transactional
def increment_challenge(self, session):
self.current_challenge += 1
self.put()
return