Microsoft Jet을 통해 pyodbc를 사용하여 Python 프로그램에서 Microsoft Access 2003 데이터베이스의 데이터에 액세스합니다.PyODBC 및 Microsoft Access : 간단한 쿼리의 일치하지 않는 결과
Microsoft Access 데이터베이스는 타사에서 제공됩니다. 나는 그 자료 만 읽는다.
저는 일반적으로 필요한 데이터를 추출하는 데 성공했지만 최근에는 약간의 불일치를 발견했습니다.
나는 형태의, 간단한 쿼리에로 요약했다 :
SELECT field1 FROM table WHERE field1 = 601 AND field2 = 9067
나는 난독 화 한 필드 이름과 값을하지만 정말, 그보다 더 사소한하지 않습니다! Access에서 쿼리를 실행하면 하나의 레코드가 반환됩니다.
이connection = pyodbc.connect(connectionString)
rows = connection.execute(queryString).fetchall()
(다시 말하지만, 그것은 훨씬 더 사소한보다하지 않습니다!)
가 검색어 문자열의 값은 절단 : 다음
나는 다음과 같다 코드, pyodbc에 그것을 실행 및 Access에서 작업 쿼리에서 붙여 넣은 있지만 아니요 레코드를 반환합니다. 나는 그것이 같은 기록을 되 찾을 것으로 기대했다.
field2에 대해 다른 값을 검색하도록 쿼리를 변경하면 bingo가 작동합니다. 그것이 거부하는 것은 단지 일부 값입니다.
그래서 제발 도와주세요. 이 불일치를 설명하기 위해 어디에서 옆을보아야합니까? 사소한 쿼리의 결과를 신뢰할 수 없다면이 프로젝트에 대한 기회가 없습니다!
업데이트 : 더욱 간단 해집니다. 다음 쿼리는이 때때로 데이터를 채 웁니다 다른 응용 프로그램에 의해 캐싱 및/또는 부적절한 트랜잭션 관리의 형태와 관련이 있다면 숙고
... 테이블에서
SELECT COUNT (*)를 다른 번호를 제공합니다 .
쿼리 문자열을 실행하기위한 커서 개체가 있어야합니까? 그런 다음 커서에서 Fetchall을 호출하여 행을 생성합니다. http://code.google.com/p/pyodbc/wiki/Rows – barrowc
@barrowc, Interesting을 참조하십시오. 나는 커서() 호출의 부족을 알지 못했다. 나는 이것을 어딘가에 모방 한 것으로부터 복사했다고 확신한다. 나는 그것을 [rows = connection.cursor(). execute (queryString) .fetchall()]에 다시 추가하려고 시도했지만 아무런 차이가 없었습니다. 분명히 pyodbc는 Python DB API 스펙보다 더 관대합니다. – Oddthinking