2017-12-15 5 views
1

を返さない私持って、次のコード: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クエリを書くことができます。

また、意図的に間違った値を入力した場合でも、エラーは発生しません。私は解決策は、それは野生の推測ですが、おそらくあなたがあなたの変更をコミットする必要があり、このような何か、(connMySQLdb.connect()によって返されたオブジェクトであると仮定した場合)conn.close()

+0

トランザクションがコミットされていない可能性がありますか?その場合、単にcursor.executeの後にdatabase_connection.commit()を追加してみてください。それは解決策ではなく、診断だけです。 –

+0

は何も変更しません。非常に奇妙なエラー。私はこの問題を挿入または選択クエリで持っていません – Fahad

答えて

0

を使用する必要がされることがわかってきました

EDIT

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 
+0

私はすでにその方法で試してみました、申し訳ありません、私はそれを私の編集に入れるのを忘れました。それは動作しません – Fahad

0

私はconn.close()を試してみました。更新クエリが、接続が閉じられるまでコミットせずに接続を開いたままにしておくかどうかはわかりませんが、それは私にとってはうまくいっているようです。私はPhpMyadminを使うときにMySQLがタイムアウトしてしまったので、これについて考えました。これは、同じ問題を抱えている誰かを助けることを望みます。

関連する問題