【发布时间】:2010-09-05 09:17:22
【问题描述】:
我正在尝试添加一个事务以防止创建具有相同属性的两个实体。在我的应用程序中,每次看到新的 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
【问题讨论】: