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

2024-03-29 11:33:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在googleappengine上,我想为一个数据表创建一个唯一的键。按照this的建议,我正在尝试执行以下操作:

假设我有一个名为Message的模型,字段值从web页面中获得,如下所示:

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. 如何防止并发问题?我知道我可以使用“事务”如下:

    @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()
    

但是如果交易失败了呢?我该怎么做直到成功?提前谢谢。在


Tags: keynameselfidmessagedbgetput
1条回答
网友
1楼 · 发布于 2024-03-29 11:33:28

当您不提供密钥时,数据存储将为您返回一个密钥,因此您不必将实体放两次。put将返回密钥。在

所以你可以:

^{1}$

相关问题 更多 >