谷歌应用引擎数据存储唯一ID

时间:2013-01-21 16:04:18

标签: python google-app-engine

在Google App Engine上,我想为数据表创建一个唯一键。正如this所建议的那样,我正在尝试执行以下操作:

假设我有一个名为Message的模型,并且字段值是从网页获得的,如下所示:

message = db.Message()
message.name = self.request.get('name')
message.email = self.request.get('email')
...
message.put()
message.messageId = message.key().id()
message.put()

我有两个问题:

  1. 这是创建唯一ID(messageId)的正确方法吗?我的意思是:把实体放在第一位,得到它的id并分配给messageId,最后再放一次?看起来很奇怪。

  2. 如何防止并发问题?我知道我可以使用'transaction'如下:

    @db.transactional
    def storeEntity():
        message.name = self.request.get('name')
        message.email = self.request.get('email')
        ...
        message.put()
        message.messageId = message.key().id()
        message.put()
    
  3. 但如果此交易失败怎么办?在成功之前我该怎么做?提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果您未提供密钥,数据存储区将为您返回密钥,因此您不必将实体放置两次。并且put将返回密钥。

所以你可以:

message_key = Message(name = self.request.get('name'), email : self.request.get('email')).put()