【问题标题】:GAE Datastore Put()GAE 数据存储 Put()
【发布时间】:2010-03-23 07:42:51
【问题描述】:
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.')

如果“更新”是包含密钥数据存储密钥的查询字符串,这是否会更新现有记录。我试试这个,但继续添加新的记录/实体。请给我一些正确更新记录/实体的建议。

纠正? :

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.')

【问题讨论】:

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


    【解决方案1】:

    知道key就不需要查询了:直接在key上调用db.get()就可以直接获取,比查询快很多。

    至于您每次创建新记录的原因,您似乎没有正确地将“更新”传递给您的页面。尝试记录查询字符串参数,看看出了什么问题。

    【讨论】:

    • 上面的 db.get() 是否正确?如何在本地 SDK 中记录查询?谢谢尼克
    • 是的,您在上面使用的代码应该可以工作,假设 'update' 是一个字符串键 - 不是键名。使用日志模块(例如 logging.warn)进行日志记录,并查看控制台窗口以查看记录的消息。
    • BadKeyError: Invalid string key Raises,我从查询字符串中获取“更新”字符串,例如/personal?update=ahJsaXZlbGlob29kcHJvZHVjZXJyDwsSCFBlcnNvbmFsGM0wDA。如何将其分配为正确的字符串键?谢谢你的帮助尼克。我只是非常新手.... :-)
    • 看起来确实像一个字符串键(不是键名)。您只需要确保它确实是一个,并且它没有被损坏/截断/等等。
    【解决方案2】:

    我终于自己回答了这个问题,感谢 Nick Johnson 对此的指导。 我无法将查询字符串 url 作为总是引发 BadKeyError: Invalid string key 异常的“字符串键”。

    我尝试将此“更新”字符串作为隐藏字段放在 html 编辑表单上,这有效,因为“更新”现在是有效的“字符串键”。

    def post(self):
        update = self.request.get('update')
    
        if users.get_current_user():
            if update != '':
                personal = Personal.get(db.Key(update))
    

    【讨论】:

      猜你喜欢
      • 2012-11-22
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2023-04-02
      • 2023-03-25
      相关资源
      最近更新 更多