を返さない私持って、次のコード:PythonのMySQLは、フィールドを更新するか、エラー
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
私は、エンドポイントに値を送信し、それがcheck_token()
機能が働くため、正常に動作していることを知っているポストマンを使用していますちょうど良い。奇妙なことは、クエリがエラーをスローしないことですが、DBも更新しないということです。 PhpMyAdminでは、問題なく上記のようにSQLクエリを書くことができます。
また、意図的に間違った値を入力した場合でも、エラーは発生しません。私は解決策は、それは野生の推測ですが、おそらくあなたがあなたの変更をコミットする必要があり、このような何か、(conn
はMySQLdb.connect()
によって返されたオブジェクトであると仮定した場合)conn.close()
トランザクションがコミットされていない可能性がありますか?その場合、単にcursor.executeの後にdatabase_connection.commit()を追加してみてください。それは解決策ではなく、診断だけです。 –
は何も変更しません。非常に奇妙なエラー。私はこの問題を挿入または選択クエリで持っていません – Fahad