동일한 데이터를 생성하는 Python의 MySQL 쿼리
동적 데이터를 검색하기 위해 Python에서 MySQL 데이터베이스를 반복적으로 쿼리하는 것은 어려운 일입니다. 단순히 루프에서 쿼리를 반복하는 것만으로는 데이터베이스에서 새로운 데이터를 가져오는 데 충분하지 않은 것으로 알려져 있습니다.
제공된 코드는 이 문제를 예시합니다.
for i in range(listSize):
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
fetchall, fetchmany, fetchone을 사용해도 결과는 정체 상태입니다.
해결책: 연결 커밋
이 문제를 해결하려면 각 쿼리 실행 후에 연결 커밋이 이루어져야 합니다. 이 작업은 진행 중인 트랜잭션을 종료하고 새 트랜잭션을 시작하여 후속 쿼리에서 이전 트랜잭션 중에 발생한 변경 사항을 감지할 수 있도록 합니다.
while True:
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
mydb.commit()
#...
격리 수준 및 REPEATABLE READ 기본값
이 개념은 격리 수준에 뿌리를 두고 있습니다. 기본적으로 MySQL은 InnoDB에 대해 REPEATABLE READ를 사용합니다. 이는 트랜잭션 내에서 후속 읽기가 트랜잭션의 초기 읽기에 의해 설정된 스냅샷을 유지함을 의미합니다. 따라서 커밋하지 않으면 후속 쿼리에서 변경 사항이 캡처되지 않습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3