Python MySQL没有更新字段或返回错误

时间:2017-12-15 07:43:36

标签: python mysql mysql-python

我有以下代码:

def post(self):
    data = UserActivation.parser.parse_args()

    check = UserConfirm.check_token(data['email'],data['token'])
    activate_user = UserConfirm.activate_user(data['email'])


    if check == False:
        return {"message": "Invalid Token or Email Address"}, 400
    else:
        if activate_user:
            return {"message": "Your account is now active"}, 201
        else:
            return {"message": "Error Activating Account"}, 500

在用户模型中传递到UserConfirm类:

def activate_user(email):
        query_users = "UPDATE users SET activated=1 WHERE email=%s"
        cursor.execute(query_users, (email,))

由于某种原因,代码不会失败,也不会更新数据库。我尝试按如下方式进行一些错误处理,只是为了看看发生了什么:

        try:
            email = data['email']
            query_users = "UPDATE users SET activated=1 WHERE email=%s"
            cursor.execute(query_users, (email,))
            return {"message": "done"}, 201
            conn.commit()
        except MySQLdb.Error as e:
            error=e.args[0], e.args[1]
            return {"message": error}, 500

我使用Postman将值发送到终点并知道它正常工作,因为check_token()函数运行正常。奇怪的是,查询不会抛出错误,但也不会更新数据库。在PhpMyAdmin中,我可以如上所述写出SQL查询而没有任何问题。

另外,如果我故意输入错误的值,它仍然会返回而没有错误。

编辑我发现解决方案必须使用conn.close()

2 个答案:

答案 0 :(得分:0)

这是一个疯狂的猜测,但可能你需要提交你的更改,就像这样(假设connMySQLdb.connect()返回的对象):

    try:
        email = data['email']
        query_users = "UPDATE users SET activated=1 WHERE email=%s"
        cursor.execute(query_users, (email,))
        conn.commit()
        return {"message": "done"}, 201
    except MySQLdb.Error as e:
        error=e.args[0], e.args[1]
        return {"message": error}, 500

答案 1 :(得分:0)

好的,奇怪的是,我尝试使用conn.close()并且它有效吗?不确定更新查询是否保持连接打开而不提交直到它被关闭 - 但它似乎对我有用。我只想到这一点,因为MySQL在使用PhpMyadmin时保持超时。希望这可以帮助其他人解决同样的问题。