我有以下代码:
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()
答案 0 :(得分:0)
这是一个疯狂的猜测,但可能你需要提交你的更改,就像这样(假设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
答案 1 :(得分:0)
好的,奇怪的是,我尝试使用conn.close()
并且它有效吗?不确定更新查询是否保持连接打开而不提交直到它被关闭 - 但它似乎对我有用。我只想到这一点,因为MySQL在使用PhpMyadmin时保持超时。希望这可以帮助其他人解决同样的问题。