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라고 할까?
만약 순서를 바꾼다면 문제가 없을까? 이건 다음에 시도해봐야겠다.
반응형
'Python3 > Flask' 카테고리의 다른 글
[Flask] ReferenceError: weakly-referenced object no longer exists 의 발생이유 (0) | 2021.11.25 |
---|---|
[Flask] flask error (0) | 2021.11.24 |
[Flask] ReferenceError: weakly-referenced object no longer exists (0) | 2021.11.23 |
[Flask] 블로그 소개 (0) | 2021.11.22 |