1

Я только начал испытывать эту проблему. Я ничего не изменил, но внезапно кажется, что после выполнения задания после изменения значения значение не сохраняется, когда я позже просматриваю его в базе данных или делаю запрос в консоли. Но это происходит только ИНОГДА.Значения NDB 'put' не сохраняются?

Так у меня есть эта модель, как:

class User(IXBase, flask_security.UserMixin): 
    ..... 
    current_challenge = ndb.IntegerProperty(default=1) 

я добавил журналы в _post_put_hook и распечатать значения. Я вижу, ожидаемое значение есть (в данном случае 5 для current_challenge)

User(key=Key('User', '[email protected]'), active=True, created=datetime.datetime(2015, 7, 15, 2, 2, 25, 854790), current_challenge=5, 

Однако, если я печатаю это значение, что я иногда вижу значение это было в ранее. (в этом случае я вижу 4). Но снова только иногда я вижу предыдущее значение, иногда оно увеличивается правильно, но, похоже, оно только что началось в последнее время, и из того, что я могу сказать, я ничего не изменил.

Так что, если я это сделаю, кажется, что это значение не сохраняется.

u = ndb.Key('User', '[email protected]').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 делают некоторые другие расчеты и цифры, если он должен вызвать increment challenge (который также является методом для пользователя)

Любая помощь будет замечательной!

+0

я полагаю, вы уже знаете, что в конце концов датастор последовательны? если нет, это ваш ответ. –

+0

Правильно, но он, кажется, никогда не синхронизируется. Даже через час значение все еще неверно. – Jonovono

+0

Первое, что я хотел бы сделать, это получить ключ сущности, которую вы только что положили, и явно «получить» ее с помощью этого ключа. Если он будет удаленно извлечен, вы знаете, что теперь есть проблемы с вашими puts –

ответ

0

Используйте transaction:

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

 Смежные вопросы

  • Нет связанных вопросов^_^