2017-12-15 4 views
1

을 반환하지 I가 다음 코드를파이썬 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() 기능 작동하기 때문에 잘 됐네. 이상한 점은 쿼리가 오류를 throw하지 않고 DB를 업데이트하지 않는다는 것입니다. PhpMyAdmin에서 위와 같이 문제없이 SQL 쿼리를 작성할 수 있습니다.

또한 의도적으로 잘못된 값을 입력해도 오류없이 반환됩니다.

편집 나는 솔루션 그것은 야생 추측 conn.close()

+0

트랜잭션이 커밋되지 않았습니까? cursor_execute 다음에 database_connection.commit()을 추가하여 문제가 없는지 알아보십시오. 그것은 해결책이 아니며 단지 진단입니다. –

+0

은 아무 것도 변경하지 않습니다. 아주 이상한 오류. 삽입이나 검색어 선택과 관련하여이 문제가 없습니다. – Fahad

답변

0

를 사용하지 것이 발견했지만, 아마도이 같은 (객체가 MySQLdb.connect()에 의해 반환되는 conn 가정), 변경 사항을 커밋 뭔가가 필요 :

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이 시간 제한을 지키기 때문에이 점만 생각했습니다. 희망이 동일한 문제가있는 다른 사람을 도울 수 있기를 바랍니다.

관련 문제