2013-01-11 2 views
10

PyODBC를 사용하여 Python에서 Teradata 데이터베이스를 쿼리하려고합니다. 데이터베이스에 대한 연결이 올바르게 설정되었습니다. 그러나 결과를 가져 오려고하면 "Decimal : u ''에 유효하지 않은 리터럴이 표시됩니다. 도와주세요.Python/Teradata의 쿼리에 문제가 발생했습니다.

파이썬 여기에 2.7.3

코드와 결과로, RHEL6 오전 : 나는 상자 밖으로 그 pyodbc대로 작동하지 않을 수 있습니다 발견

import pyodbc 

sql = "select * from table" 

pyodbc.pooling = False 
cnx = pyodbc.connect("DRIVER={Teradata};DBCNAME=host;DATABASE=database; AUTHENTICATION=LDAP;UID=user;PWD=password", autocommit=True, ANSI=True) 
cursor = cnx.cursor() 
rows = cursor.execute(sql).fetchone() 

InvalidOperation       Traceback (most recent call last) 
<ipython-input-25-f2a0c81ca0e4> in <module>() 
----> 1 test.fetchone() 

/usr/local/lib/python2.7/decimal.pyc in __new__(cls, value, context) 
    546      context = getcontext() 
    547     return context._raise_error(ConversionSyntax, 
--> 548         "Invalid literal for Decimal: %r" % value) 
    549 
    550    if m.group('sign') == "-": 

/usr/local/lib/python2.7/decimal.pyc in _raise_error(self, condition, explanation, *args) 
    3864   # Errors should only be risked on copies of the context 
    3865   # self._ignored_flags = [] 
-> 3866   raise error(explanation) 
    3867 
    3868  def _ignore_all_flags(self): 

InvalidOperation: Invalid literal for Decimal: u'' 
+0

드라이버가 고정 소수점 숫자를 예상하고 빈 문자열을 반환하는 것처럼 보입니다. 테이블 스키마는 어떤 모습입니까? 어떤 행이 반환되어야합니까? – cmd

+1

질문에 감사드립니다. 결과 세트로 작업해야하는 Python 스크립트에서 Teradata 데이터베이스 연결을 설정하는 데 도움이되었습니다. :). – Jubbles

답변

0

null 문자가 '?'로 설정된 경우 (필자는 이것이 기본이라고 생각한다.) 또는 이상한 일이라면 반환과 관련된 문제 일 수있다. 특히 파이썬을 친 데이터로 작업하는 경우 특히 그렇다. (컴파일하기 전에) setup.py의 오른쪽 로케일을 강제

1

예, 나를 위해 속임수를 썼는지 :이 오류가 발생한

import locale 
locale.setlocale(locale.LC_ALL, 'es_ES.utf8') 
1

, 난 반면, 원인이 pyodbc가이었다이었다 64 비트를 찾아 내 teradata 드라이버는 32였습니다.이 문제는 unixodbc를 사용하여 새 드라이버를 빌드 한 후에 해결되었습니다.

관련 문제