2009-06-30 4 views
2

많은 (~ 25) 개의 테이블에서 사용자 이름을 변경해야합니다. (그래, 나도 알아.) 원자 거래가 이런 종류의 일을하는 길일 것 같다. 그러나 pyodbc로이 작업을 수행하는 방법을 알지 못합니다. 이전에 원자 트랜잭션에 대한 다양한 자습서를 보았지만 결코 사용한 적이 없습니다.Python에서 pyodbc를 사용하여 어떻게 트랜잭션을 수행합니까?

설치 : Windows 플랫폼, Python 2.6, pyodbc, Microsoft SQL 2005. 단일 SQL 문은 pyodbc를 사용했지만 복합 문이나 트랜잭션은 사용하지 않았습니다.

SQL에 대한 유용한 정보는 저장 프로 시저를 만드는 것이 좋습니다. 저장 프로 시저에 대한 두려움은 다음과 같이 중요도가 증가합니다. 1) 스토어드 프로 시저를 작성한 적이 없습니다. 2) pyodbc가 저장 프로 시저의 결과를 아직 반환하지 않는다고 들었습니다. 3) 이것은 내 데이터베이스가 아닙니다. 공급 업체가 제공하고 공급 업체가 업데이트하는 등의 작업입니다.

그래서이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

-3

나는 pyodbc가 트랜잭션에 대해 특정 지원을한다고 생각하지 않습니다. 트랜잭션을 시작/커밋/롤백하려면 SQL 명령을 보내야합니다.

8

documentation에 의해 pyodbc는 트랜잭션을 지원하지만 odbc 드라이버가 트랜잭션을 지원하는 경우에만 트랜잭션을 지원합니다. 또한 pyodbc는 PEP 249과 호환되므로 수동 커밋이 수행 된 경우에만 데이터가 저장됩니다.
그러나 자동 커밋 기능도 지원하므로이 경우 트랜잭션을 사용할 수 없습니다.

cnxn.autocommit = False 

참고로 자동 커밋 모드를 해제 명시 적으로

cnxn = pyodbc.connect(cstring, autocommit=True) 

또는를 수행 할 때, 연결을 확인해야합니다 : 당신이 pyodbc의 자동 커밋 모드에 대한 정보에 얻을 수 있습니다 그 wiki

일단 자동 커밋이 꺼지면 트랜잭션을 명시 적으로 커밋()하거나 전체 트랜잭션을 롤백()해야합니다 정결.