Python3/Flask

[Flask] mysql.connector.errors.DatabaseError: 2014 (HY000): Commands out of sync; you can't run this command now

Razelo 2021. 11. 23. 23:57

Flask 를 통해 개발하면서 sql을 직접 작성해줄 일이 있을텐데 이때 특정 sql문이 두개 이상 존재할때 연달아 실행되어야할 sql문들의 중간에서 commit을 치게 되면 이후의 sql문이 실행되지 않는 경우가 발생했다. 내 경우에는 아래와 같은 경우였다. 

sql = """update user set user_address=%s, user_job=%s where user_SSN=%s; commit;"""
        mysql_cursor.execute(sql, (data))

        data2 = (outer_user_SSN)
        sql = """select * from user where user_SSN = %s;"""

위의 코드에서 첫번째 sql문에서 commit을 미리 치게 되니 아래의 sql구문을 실행할적에 

mysql.connector.errors.DatabaseError: 2014 (HY000): Commands out of sync; you can't run this command now

에러가 발생하게 되었다. 따라서 위의 코드에서 아래와 같이 commit을 빼주면 정상 작동한다. 

sql = """update user set user_address=%s, user_job=%s where user_SSN=%s;"""
        mysql_cursor.execute(sql, (data))

        data2 = (outer_user_SSN)
        sql = """select * from user where user_SSN = %s;"""

이러한 일이 발생하는 이유에 대해서는 상세히 설명한 글들이 많지 않았지만 찾아낸 것 중 납득할 만한 설명은 '사용이 끝나지 않은 리소스 때문' 이라고 말을 하는 설명이 있었는데 왜인지는 정확히 이해가 가진 않는다. 

 

commit을 치게 되면 데이터베이스에 반영되기에 다시 읽든 쓰든 상관이 없는데 왜 out of sync라고 할까? 

만약 순서를 바꾼다면 문제가 없을까? 이건 다음에 시도해봐야겠다. 

 

 

반응형