NDB'放'的价值不持久?

时间:2015-07-15 02:16:55

标签: python python-2.7 google-app-engine google-cloud-datastore app-engine-ndb

我刚刚开始遇到这个问题。我没有改变任何东西,但突然之间看起来在更改值后执行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做了一些其他计算,并确定它是否应该调用增量质询(这也是“用户”的方法)

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

使用transaction

@ndb.transactional
def increment_challenge(self, session):
    self.current_challenge += 1
    self.put()
    return