我有以下代码:
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()
最佳答案
这是一个疯狂的猜测,但可能你需要提交你的更改,像这样(假设 conn
是 MySQLdb.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
关于Python MySQL 不更新字段或返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47827850/