覆盖App Engine中的数据

时间:2012-07-28 05:05:00

标签: python google-app-engine overwrite

我有一个从表单中获取图像的函数,并将其与用户名一起放入数据库中。所以,这是我的数据库:

class Imagedb(db.Model):
    name = db.StringProperty(required = True)
    image = db.BlobProperty()

以下是写入数据库的代码:

class Change_Profile_Image(MainHandler):
    def get(self):
        if self.user:
            self.render('change_profile_image.html', username = self.user.name, firstname=self.user.first_name)
        else:
            self.render('change_profile_image.html')

    def post(self):
        imagedb = Imagedb(name = self.user.name)
        imageupl = self.request.get("img")
        imagedb.image = db.Blob(imageupl)
        imagedb.put()
        self.redirect('/profile')

任何人,它都很棒。除了一件事。我想要完成的只是存储一张个人资料图片。最终发生的是:

说我是用户管理员。我上传一张显示图片,该图片显示在个人资料中。我会上传另一个,那个显示。很酷,除了我的数据库中有2个具有name = admin属性的对象。我想编辑这个......

    def post(self):
        imagedb = Imagedb(name = self.user.name)
        imageupl = self.request.get("img")
        imagedb.image = db.Blob(imageupl)
        imagedb.put()
        self.redirect('/profile')

这样我就可以将图像发布到数据库中,但如果存在,则会被覆盖。有人可以帮我这个吗?我对python和app引擎比较陌生。

如果不清楚,请告诉我。

1 个答案:

答案 0 :(得分:1)

您希望将Imagedb实体的键设置为“name”。基本上,您不需要名称字段,但您将像

一样实例化它
imagedb = Imagedb(key_name = self.user.name)

密钥是所有实体的必填字段。通过使用您的用户名作为密钥,它意味着每次您引用给定密钥时,它都是同一个实体。