【发布时间】:2013-01-21 16:04:17
【问题描述】:
在 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()
我有两个问题:
这是创建唯一 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()
但是如果这个交易失败了怎么办?在成功之前我该怎么做?提前致谢。
【问题讨论】:
-
能否详细说明。您想创建自己的唯一 ID,还是只使用自动生成的 ID?因为在您的代码中,您正在使用已分配的自动生成的 ID 设置属性 messageId。您不需要手动分配它。
-
是的,我明白了。旧的关系数据库概念:必须有一个主键 ;-)