【发布时间】:2014-10-13 19:13:49
【问题描述】:
例如我有这个用户模型:
class User(ndb.Model):
email = ndb.StringProperty()
只有在没有其他实体具有特定 email 属性值的情况下,我才想自动添加一个新的 User 实体。
在 SQL 中,我可以执行以下操作来检查并插入事务:
begin;
if count(select * from User where email='user@email.com') > 0 {
insert into User values('user@email.com');
}
end;
但在 GAE 中这是不允许的,因为事务内部不允许非祖先查询。我不想使用电子邮件地址作为实体键,因为用户的稳定 id 可能不是基于电子邮件地址。
【问题讨论】:
-
不明白为什么不能用email作为id。
-
@Bruyere 使用电子邮件作为 ID 通常不是一个好主意,因为用户的电子邮件最终可能会更改并且 ID 是不可更改的..
标签: python google-app-engine transactions google-cloud-datastore