반응형
여러 트랜잭션에 대해 연결을 닫지 않고 단일 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
반응형
'MySql' 카테고리의 다른 글
MySQL C를 사용하여 데이터베이스에 액세스 (0) | 2021.01.30 |
---|---|
MySQL mySQL 형식 숫자 출력, 천 단위 구분 기호 (0) | 2021.01.30 |
MySQL mysqli :: mysqli () : php_network_getaddresses : getaddrinfo 실패 : 이름 또는 서비스를 알 수 없음 (0) | 2021.01.29 |
MySQL 삭제 순서 (0) | 2021.01.29 |
MySQL mySQL에서 LINQ to SQL을 사용하는 방법 (0) | 2021.01.29 |
댓글