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

Python 如何改进创建内部ID为键的模型的方法?,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,我已经为一个iOS应用程序构建了一个后端,使用运行python 2.7的Google应用程序引擎。当我创建对象时,我希望后端为它提供一个ID,所有客户端都可以使用该ID作为查询的唯一标识符。我使用的这个方法包括两个put,基本上只是使用db而不是ndb。是否有更好的方法插入对象并为其提供易于访问的整数ID class Player(ndb.Model): playerID = ndb.IntegerProperty() username = db.StringProperty

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

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

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

这里有一种方法,您可以在一次put操作中指定您选择的密钥。用这个构造函数替换“else”子句中的构造函数

“id”属性将为实体指定任何键,就像旧数据库中的“key_name”一样

newPlayer = Player(
    username=username,
    id = # the key of your choosing
    )
NewPlayer.put()
您还需要一种为每个实体生成唯一密钥的方法,但我相信您已经解决了这一部分


祝你好运

哦,对不起,我贴错了方法。基本上,我有一个方法将查询的ID设置为ID,但是当我基于用户名创建一个播放器时,我想给它一个后端生成的ID,我给客户端。例如,如果我使用基于用户名的Facebook帐户注册了一名玩家,而我没有ID。这需要由后端井生成,但这是我的观点,密钥总是有ID,所以你可以使用它。ID变量是什么?我明白了:密钥id必须是字符串或数字;收到否,我想让数据存储创建ID,然后在分配ID之前,我不必检查是否获取了任何ID。