2012-05-08 3 views
0

최근에 Windows 7 상자를 사용하기 시작했습니다. 32 비트 ASE 드라이버 (Adaptive Server Enterprise)를 사용하여 Sybase 데이터베이스를 쿼리하려고합니다. 시스템에 설치된 Sybase 클라이언트는 v15.5입니다.pyodbc가 Sybase 데이터베이스에 쿼리하여 부분 데이터를 일부 가비지로 반환하는 이유는 무엇입니까?

문제는 작은 데이터를 쿼리 할 때 올바른 결과를 얻을 수 있지만 예상되는 결과가 40 개가 넘는 경우 오류가 발생한다는 것입니다.

>>> x = smd.Query("select ric_code as ric, weight, adjusted_weight as adjweight, 
    currency as currency, close_price as last from v_temp_idx_comp where index_ric_ 
code='.HSI'") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "s:\quant\python\v1.0\smd.py", line 15, in Query 
    result = x.fetchall() 
pyodbc.Error: ('HY000', 'The driver did not supply an error!') 

이 오류를 해결하는 방법을 모르겠습니다. 이 단계를 더 디버깅하려면 어떤 단계를 밟아야합니까? 더 많은 조사를 위해 몇 가지 명령 행 도구를 사용할 수 있습니까? 어때요? 그들은 동일한 기본 운전자를 사용합니까?

참고로 쿼리에는 문제가 없습니다. Merant 드라이버를 사용했던 이전 머신에서 쿼리가 잘 작동합니다.

모든 의견을 환영합니다.

+0

커서의'fetchall()'함수 호출에 오류가 발생했습니다. – Alok

+0

나는 출력 결과를 손상시키는 결과 집합의 열 중 하나에 문제가 있음을 알게되었습니다. 나는 이것을 피하는 방법을 더 조사해야한다. 그 칼럼을 떨어 뜨리면 데이터가 제대로 나옵니다. – Alok

답변

1

정확하게 똑같은 문제를 겪고 있었기 때문에 나는이 게시물을 발견했습니다. (Windows 7과 Sybase ASE 15.5 [내 경우에는 python 2.7.2 만 해당됩니다.]

내 문제를 해결했다고 생각합니다. 쿼리하는 테이블의 열 중 하나가 "bigint"데이터로 정의되었습니다. 유형. 이것은 새로운 테이블이기 때문에 테이블을 삭제하고 "int"만 데이터 유형으로 사용하여 다시 작성했습니다. 이제는 정상적으로 작동합니다. 나는 "bigint"유형의 추가 용량이 필요 없다는 사실이 밝혀 졌기 때문에 운이 좋았다. "int"는 내가하는 일에 충분하다.

+0

우리는 또한이 문제를 발견했습니다. 동적으로 생성 된 뷰 중 하나에는 드라이버가 처리하지 않는 정밀도의 열이 있습니다. 뷰 정의를 변경하고 열이 적절한 정밀도 값을 갖도록 강제 한 후에 우리는 문제를 해결할 수있었습니다. 슬프게도 드라이버가 오류를 올바르게 제공하지 않습니다. – Alok