본문 바로가기
MySql

MySQL 연결 당 여러 트랜잭션이있는 MySQLdb

by 베이스 공부 2021. 1. 30.
반응형

여러 트랜잭션에 대해 연결을 닫지 않고 단일 MySQLdb 연결을 사용하는 것이 괜찮습니까? 즉, 다음과 같습니다.

conn = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")

for i in range(10):
    try:
        cur = conn.cursor()
        query = "DELETE FROM SomeTable WHERE ID = %d" % i
        cur.execute(query)
        cur.close()
        conn.commit()

    except Exception:
        conn.rollback()

conn.close()

제대로 작동하는 것 같지만 다시 확인하고 싶었습니다.

 

해결 방법

 

나는 여기서 거래를 구성하는 것에 대해 오해가 있다고 생각합니다.

귀하의 예제는 하나의 연결을 연 다음 하나 트랜잭션을 실행합니다. 해당 트랜잭션에서 여러 SQL 문을 실행하지만 커밋 후 완전히 닫습니다. 물론 괜찮습니다.

여러 트랜잭션 을 실행하면 (단순한 SQL 문이 아님) 다음과 같습니다.

conn = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")

for j in range(10):
    try:
        for i in range(10):
            cur = conn.cursor()
            query = "DELETE FROM SomeTable WHERE ID = %d" % i
            cur.execute(query)
            cur.close()
        conn.commit()
    except Exception:
        conn.rollback()

conn.close()

위의 코드는 각각 10 개의 개별 삭제 문으로 구성된 10 개의 트랜잭션을 커밋합니다.

그리고 예, 스레드간에 연결을 공유하지 않는 한 문제없이 열린 연결을 다시 사용할 수 있어야합니다.


 

참조 페이지 https://stackoverflow.com/questions/12378227

 

 

반응형

댓글