GAE - 祖先问题

时间:2012-07-08 19:42:58

标签: python database google-app-engine transactional

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

     

在交易中只允许祖先查询。

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

1 个答案:

答案 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