0

我已经使用运行 python 2.7 的 Google App Engine 为 iOS 应用程序构建了一个后端。当我创建对象时,我希望后端给它一个 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
4

2 回答 2

0

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

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

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

您还需要一种为每个实体生成唯一密钥的方法,但我相信您已经弄清楚了这部分。

祝你好运!

于 2013-09-18T13:52:25.427 回答
0

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

player_key = ndb.Key(Player, id)
player = player_key.get()
于 2013-09-12T15:54:34.217 回答