GAE 数据存储 Put()

3 投票
2 回答
954 浏览
提问于 2025-04-15 20:44
def post(self):
    update = self.request.get('update')

    if users.get_current_user():
        if update:
            personal = db.GqlQuery("SELECT * FROM Personal WHERE __key__ = :1", db.Key(update))

            personal.name = self.request.get('name')
            personal.gender = self.request.get('gender')
            personal.mobile_num = self.request.get('mobile_num')
            personal.birthdate = int(self.request.get('birthdate'))
            personal.birthplace = self.request.get('birthplace')
            personal.address = self.request.get('address')
            personal.geo_pos = self.request.get('geo_pos')
            personal.info = self.request.get('info')
            photo = images.resize(self.request.get('img'), 0, 80)
            personal.photo = db.Blob(photo)
            personal.put()
            self.redirect('/admin/personal')
        else:
            personal= Personal()

            personal.name = self.request.get('name')
            personal.gender = self.request.get('gender')
            personal.mobile_num = self.request.get('mobile_num')
            personal.birthdate = int(self.request.get('birthdate'))
            personal.birthplace = self.request.get('birthplace')
            personal.address = self.request.get('address')
            personal.geo_pos = self.request.get('geo_pos')
            personal.info = self.request.get('info')
            photo = images.resize(self.request.get('img'), 0, 80)
            personal.photo = db.Blob(photo)
            personal.put()
            self.redirect('/admin/personal')

    else:
        self.response.out.write('I\'m sorry, you don\'t have permission to add this LP Personal Data.')

如果查询字符串中包含“update”这个关键字,应该会更新现有的记录。如果我尝试这样做,却总是添加新的记录或实体。请给我一些建议,告诉我怎么才能正确地更新记录或实体。

有什么需要改正的吗?

def post(self):
    update = self.request.get('update')

    if users.get_current_user():
        if update:
            personal = Personal.get(db.Key(update))

            personal.name = self.request.get('name')
            personal.gender = self.request.get('gender')
            personal.mobile_num = self.request.get('mobile_num')
            personal.birthdate = int(self.request.get('birthdate'))
            personal.birthplace = self.request.get('birthplace')
            personal.address = self.request.get('address')
            personal.geo_pos = self.request.get('geo_pos')
            personal.info = self.request.get('info')
            photo = images.resize(self.request.get('img'), 0, 80)
            personal.photo = db.Blob(photo)
            personal.put()
            self.redirect('/admin/personal')
        else:
            personal= Personal()

            personal.name = self.request.get('name')
            personal.gender = self.request.get('gender')
            personal.mobile_num = self.request.get('mobile_num')
            personal.birthdate = int(self.request.get('birthdate'))
            personal.birthplace = self.request.get('birthplace')
            personal.address = self.request.get('address')
            personal.geo_pos = self.request.get('geo_pos')
            personal.info = self.request.get('info')
            photo = images.resize(self.request.get('img'), 0, 80)
            personal.photo = db.Blob(photo)
            personal.put()
            self.redirect('/admin/personal')

    else:
        self.response.out.write('I\'m sorry, you don\'t have permission to add this LP Personal Data.')

2 个回答

0

我终于自己解决了这个问题,感谢Nick Johnson的指导。

我无法将查询字符串的URL作为“字符串键”来使用,这总是会引发BadKeyError:无效的字符串键异常。

我尝试把这个“update”字符串放在HTML编辑表单的隐藏字段中,这样就可以正常工作了,因为现在“update”是一个有效的“字符串键”。

def post(self):
    update = self.request.get('update')

    if users.get_current_user():
        if update != '':
            personal = Personal.get(db.Key(update))
0

当你已经知道要找的键时,就没必要再去查询了。直接用 db.get() 这个方法加上键,就可以快速获取到你想要的内容,这比查询要快得多。

至于你每次都在创建新记录的原因,可能是因为你没有正确传递 'update' 给你的页面。可以试着打印一下查询字符串的参数,看看哪里出了问题。

撰写回答