2010-01-12 1 views
1

XML 파일에서 데이터 구문 분석을 자동화하고 여러 데이터베이스에 저장하는 프로그램을 작업하고 있습니다. (특히 USGS의 실시간 수질 서비스에 관심이있는 사람은 http://waterservices.usgs.gov/rest/WaterML-Interim-REST-Service.html입니다.) LXML과 PYODBC를 사용하여 Python 2.5.1로 작성되었습니다. + dB;
connString = 'DBQ = DRIVER = {Access 드라이버 (* .MDB)}'
데프 get_AccessConnection (dB) : 데이터베이스는 2000PYODBC를 통한 SQL 쿼리가 한 컴퓨터에서 자동으로 실패하거나 다른 컴퓨터에서 작동합니다.

다음과 같이 연결 기능은 마이크로 소프트 액세스에 DB는 데이터베이스에 대한 파일 경로입니다
cnxn = pyodbc.connect (connString, 자동 커밋 = 거짓)
커서 = cnxn.cursor()
반환 cnxn, 커서
.

프로그램 :
가) 데이터베이스
B와의 연결을 열기가) 해당 데이터베이스에 대한 2 ~ 8 XML 파일을 구문 분석하고 데이터베이스에 삽입하는 일련의 레코드로의 값을 빌드 (중첩을 사용하여 사전 구조가 아닌 사용자 정의 형식)
c)는 레코드의 일련의 루프 cursor.execute() -) 각각
D에 대한 SQL 질의를 보내고 것은 얻어 데이터베이스 연결

경우]를 폐쇄 cursor.execute() 호출은 오류를 던지고, 추적 파일과 쿼리를 로그 파일에 기록하고 계속 진행합니다.

동료가 특정 데이터베이스에 대해 자신의 컴퓨터에서 실행하면 오류가 기록되지 않고 특정 기록이 거기에 없을뿐입니다. 내 머신에서 똑같은 네트워크 경로를 통해 데이터베이스의 똑같은 복사본에 똑같은 코드를 실행할 때 거기에있는 모든 데이터가 거기에있다.

동료와 필자 모두 Microsoft Access 2000과 Python, lxml 및 pyodbc의 동일한 버전이 설치된 Windows XP 컴퓨터에 있습니다. 나는 우리가 같은 버전의 Microsoft ODBC 드라이버를 가지고 있는지 확인하는 방법을 모른다. 나는 거기에있는 기록과 그렇지 않은 기록 사이에 차이점을 찾을 수 없었습니다. 나는 다른 데이터베이스에서도 같은 문제가 발생하는지 여부와 세 번째 동료의 컴퓨터에서 발생하는지 여부를 테스트하는 중입니다.

내가 정말로 알고 싶은 것은 그것이 나에게 의미가 없기 때문에 누구나 생각할 수있는 것이 무엇이든간에 생각할 수 있다는 것입니다. 요약 : SQL 쿼리를 실행하는 Python 코드는 한 컴퓨터에서 절반 만 실패하고 다른 컴퓨터에서는 완벽하게 작동합니다.

편집 :
더 이상 문제가 없습니다. 방금 동료가 다시 실행하도록했는데 데이터베이스가 누락 된 레코드없이 완전히 업데이트되었습니다. 왜 그것이 처음부터 실패했는지, 그것이 다시 일어날 지 여부는 모르지만 "문제가 해결되었습니다."

+0

'자동 커밋'없이 차이가 있습니까? 액세스는 트랜잭션 데이터베이스가 아니므로 확실히'autocommit = False'는 존중 될 수 없습니다. ODBC를 사용하여 스크립트를 통해 액세스하는 모든 경험은 절대적으로 끔찍했습니다 (중단 등). 당신은 ADO를 시도 할 수 있습니다 적어도 덜 나쁜 ... 이상적으로 물론 액세스를 떠나야합니다. – bobince

+0

나는 Access가 트랜잭션이 아니었다는 것을 알지 못했습니다. 프로그램을 테스트하는 동안 cnxn.commit()을 호출하지 않으면 데이터베이스가 변경되지 않습니다. 가능한 경우 자동 커밋을 변경하지 않을 것입니다. 나는 예기치 않은 미처리 된 오류가 나타나면 반쯤 완료된 데이터베이스를 원하지 않는다. – Rowan

+0

@Rowan : 이것은 예상됩니다. Access는 트랜잭션이 "커밋하도록"알릴 때까지 아무 것도하지 않고 기다립니다. : "-> Access – Hogan

답변

1

내가 어떻게 여부를 우리가 마이크로 소프트 ODBC 드라이버의 동일한 버전을 확인하는 방법 아무 생각이 없습니다.

나는 제어판을 찾고 있다고 생각합니다. | 관리 도구 | 데이터 소스 (ODBC). "드라이버"탭을 클릭하십시오.

Access 2000 또는 Office 2000은 "MSDE"라는 SQL Server의 데스크톱 버전과 함께 제공됩니다. 테스트를 위해 설치할 가치가 있습니다. (또는 그 문제에 대한 생산.)