如何在GAE中更新数据存储区

时间:2012-06-01 15:41:18

标签: google-app-engine google-cloud-datastore python-2.7

这是我存储用户的模型:

class User(db.Model):
    username = db.StringProperty(required = True)
    password = db.TextProperty(required = True)
    email = db.TextProperty(required = True)

假设此用户注册,我将数据放入数据存储区

u = Post(username = joey, password = encrypt(password), email=joey@friends.com)
u.put()
u = Post(username = chandler, password = encrypt(password), email=chandler@friends.com)
u.put()
u = Post(username = ross, password = encrypt(password), email=ross@friends.com)
u.put()

如果用户点击忘记密码或更改密码。如何使用用户名或电子邮件作为密钥获取记录并更新新的加密密码?

我尝试了以下内容:

u = User.all().filter('username=', 'joey').fetch(10)
      for r in u: #assuming I get only one record.
        r.password = encrypt(password)
        r.put()

这是另一条进入数据存储区的记录。现在我有两个 joey 的记录。

还试过,使用GqlQuery获取用户记录并尝试更新记录。它抛出错误,“List没有定义put()方法”

请不要将我链接到文档,这让我很头疼。

TL; DR:如何使用用户定义的数据作为密钥更新GAE中的数据存储区。

编辑:修复代码拼写错误。

1 个答案:

答案 0 :(得分:0)

你得到错误的原因" List没有定义put()方法"是因为GqlQuery返回一个列表。您还应该确保用户名是唯一的。请尝试以下:

users = db.GqlQuery("select * from User where username=:1", username).fetch(1)
    if len(users) == 0:
        err = "not user with name " + username
    else:
        user = users[0]
        # change password for user
        ...