【问题标题】:Python MySQL not updating field or returning errorPython MySQL 不更新字段或返回错误
【发布时间】:2017-12-15 07:43:36
【问题描述】:

我有以下代码:

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()

【问题讨论】:

  • 可能事务还没有提交?尝试在 cursor.execute 之后添加 database_connection.commit(),以了解是否是这种情况。但这不是解决方案,只是诊断。
  • 不会改变任何东西。很奇怪的错误。我对插入或选择查询没有这个问题

标签: python mysql mysql-python


【解决方案1】:

这是一个疯狂的猜测,但可能你需要提交你的更改,就像这样(假设 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

【讨论】:

  • 我已经尝试过这种方式,抱歉我忘了把它放在我的编辑中。它不起作用
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2013-10-05
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多