在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()
我有两个问题:
这是创建唯一id(messageId)的正确方法吗?我的意思是:把实体放在第一位,得到它的id并分配给messageId,最后再放一次?看起来很奇怪。
如何防止并发问题?我知道我可以使用“事务”如下:
@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()
但是如果交易失败了呢?我该怎么做直到成功?提前谢谢。在
当您不提供密钥时,数据存储将为您返回一个密钥,因此您不必将实体放两次。put将返回密钥。在
所以你可以:
^{1}$相关问题 更多 >
编程相关推荐