flask - PUT 请求不起作用,Flask-RESTful,SQLAlchemy

标签 flask sqlalchemy flask-sqlalchemy put flask-restful

我相信问题在于提交对数据库的更改(倒数第三行: db.session.commit() )。以一个用户为例:username="Foo", email="Bar@yahoo.com"。如果在 PUT 请求正文中我放了 {"email":"changed@gmail.com"},则在赋值后打印 'user.email' 表明该值实际上已更改。然而之后,在查询数据库时,电子邮件保持不变。无论如何,我真的很难弄清楚我错过了什么,所以感谢任何帮助!

class UserAPI(Resource):
    def __init__(self):
        self.parser = reqparse.RequestParser()
        self.parser.add_argument('username', type=str, location='json')
        self.parser.add_argument('email', type=str, location='json')
        self.parser.add_argument('password', type=str, location='json')
        super(UserAPI, self).__init__()

    def put(self, id): 
        # Not working
        user = User.query.filter_by(id=id).first()
        if user is not None:
            args = self.parser.parse_args()
            for key, value in args.items():
                if args[key] is not None:
                    user.key = value
            db.session.commit()
            return {"user": marshal(user,user_field) }
        return {"error": "User not found"}, 404

最佳答案

更改 user.key = valuesetattr(user, key, value) .

而不是在这里设置您想要的属性( user.email ),而是设置 user.key .因为 user.key可能不是数据库列字段(当然也不是您打算设置的字段),当 db.session.commit() 时更改不会序列化到数据库中叫做。

关于flask - PUT 请求不起作用,Flask-RESTful,SQLAlchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30878563/

相关文章:

python - 我如何在浏览器中传递 authtoken 获取请求

json - 无法解码 JSON 对象 : Expecting value: line 1 column 1 (char 0)</p>

python - SQLAlchemy ORM 关系中的当前日期

python-3.x - Flask sqlalchemy 和 marshmallow 的多对多关系

python - 列表属性上的 SQLAlchemy 过滤器

python - flask sqlalchemy。提交不保存更改

python - login_required 编码下一个参数,重定向失败

python - 将 SQL 转换为 SQL 炼金术

python - 我可以在 ORM 事件回调中使用 SQLAlchemy 关系吗?总是没有

jquery - 使用 Flask 执行 AJAX POST,然后执行 GET