Я пытаюсь добавить транзакцию, чтобы не создавать две сущности с одинаковым атрибутом. В моем приложении я создаю новый проигрыватель каждый раз, когда вижу нового пользователя Google, вошедшего в систему. Моя текущая реализация иногда создает дубликаты игроков, когда новый пользователь Google выполняет несколько вызовов json в течение нескольких миллисекунд. Когда я добавляю транзакцию, подобную той, что была прокомментирована здесь, я получаю различные ошибки. Какой самый простой способ убедиться, что я никогда не создаю два объекта игрока с одинаковым user_id?
def get_player_from_user(self, user_id):
player = Player.all().filter('user_id =', user_id).get()
if not player:
#This can result in duplicate players with the same user_id being created.
player = self.create_new_player(user_id)
#This is what I'm trying to do.
#player = db.run_in_transaction(self.create_new_player, user_id=user_id)
return player
def create_new_player(self,user_id):
#Check one more time for an existing user_id match.
player = Player.all().filter('user_id =', user_id).get()
if player:
return player
player = Player()
player.user_id = user.user_id()
player.put()
return player