如何改进以内部ID为关键创建模型的方法?

时间:2013-09-12 15:20:05

标签: python google-app-engine app-engine-ndb

我为运行python 2.7的Google App Engine构建了一个iOS应用后端。当我创建对象时,我希望后端为其提供一个ID,所有客户端都可以使用该ID作为要查询的标识符。我使用的这个方法涉及两个put,基本上只是使用,因为我使用db而不是ndb。是否有更好的方法来插入对象并为其提供易于访问的整数ID?

class Player(ndb.Model):
     playerID = ndb.IntegerProperty()
     username = db.StringProperty()

class createUserWithUsername(webapp2.RequestHandler):
def get(self):
    username = self.request.get('username')  
    playerArr = Player.query(Player._properties["username"] == username).fetch(1)
        if len(playerArr) > 0:
            self.error(500)
        else:
            newPlayer = Player()
            newPlayer.username = username
            key = newPlayer.put()
            newPlayer.playerID = key.id()
            newPlayer.put()
   # returning player as dict to client

2 个答案:

答案 0 :(得分:0)

为什么需要查询ID然后将其另存为单独的属性?为什么不直接使用它来获得播放器?

player_key = ndb.Key(Player, id)
player = player_key.get()

答案 1 :(得分:0)

这是一种可以在一次放置操作中分配您选择的键的方法。用你的“else”子句替换你的构造函数。

“id”属性将为实体提供您分配的任何键,就像旧密钥中的“key_name”一样。

newPlayer = Player(
    username=username,
    id = # the key of your choosing
    )
NewPlayer.put()

您还需要一种为每个实体生成唯一键的方法,但我相信您已经找到了这一部分。

祝你好运!