2

我想在我的 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

我得到了同样的错误

错误请求错误:

事务中只允许祖先查询。

我的数据库模型“帐户”没有任何祖先。不应该是唯一的“祖先”吗?

4

1 回答 1

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
于 2012-07-17T12:37:02.543 回答