我想在我的gae中拥有独特的价值观,所以我通过文档阅读并发现“交易”是原子的。
https://developers.google.com/appengine/docs/python/ndb/transactions
class Account(ndb.Model):
""""Required DB """
username = ndb.StringProperty(required=True)
password = ndb.StringProperty(required=True)
mail = ndb.StringProperty(required=True)
salt = ndb.StringProperty(required=True)
date = ndb.DateTimeProperty(auto_now_add=True)
name = ndb.StringProperty()
last_name = ndb.StringProperty()
phone_number = ndb.IntegerProperty()
postal = ndb.IntegerProperty()
city = ndb.StringProperty()
products = ndb.IntegerProperty(repeated=True)
@ndb.transactional
def create_account(self):
acc = Account.query(Account.username==self.username)
acc = tuple(acc)
if len(acc)== 0:
self.put()
else:
#yield error
pass
我觉得得到同样的错误
BadRequestError:
在交易中只允许祖先查询。
我的数据库模型“帐户”没有任何祖先。 它不应该是唯一的“祖先”吗?
答案 0 :(得分:1)
解决此问题的一种方法是使用用户名作为密钥。
@classmethod
@ndb.transactional
def create(cls, username):
key = ndb.Key('Account', username)
existing_user = key.get()
if existing_user:
raise ValueError
else:
new_instance = cls(key=key, username=username)
new_instance.put()
return new_instance