2013-01-11 8 views
10

PyODBCを使用してPythonでTeradataデータベースをクエリしようとしています。 データベースへの接続が正常に確立されました。しかし、結果を取得しようとすると、「Decimal:u ''の無効なリテラルがこのエラーに遭遇しました。助けてください。私はここのPython 2.7.3Python/Teradataのクエリーに関する問題

で、RHEL6の午前

は、コードと結果である:

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

私は箱の外pyodbcのように動作しない場合がありますことを発見しましたper http://code.google.com/p/pyodbc/issues/detail?can=1&q=teradata&id=146

このスレッドで修正されたことを確認しました。 https://github.com/mkleehammer/pyodbcをチェックし、余分なコマンドをsetup.pyに追加し、再コンパイルすると、動作するように見えます。

+0

問題のリンクが壊れています。おそらくhttps://code.google.com/archive/p/pyodbc/issues/146にありますか? – Nickolay

0

ヌル文字が '?'に設定されている場合は、 (これは私が信じていると思います)や何か他のことは、特にこれがpythonにヒットしたデータで作業している場合には、これが返されたときの問題かもしれません。

1

(コンパイルする前に)setup.pyで右のロケールの強制は私のためにトリックをした、例:

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

私はこのエラーを持っていた、と私は原因がpyodbcが64ビットだったことがわかった、私のに対し、 teradataのドライバは32です。この問題はunixodbcで新しいドライバをビルドした後に解決されました。