10

I'm trying to query a Teradata database in Python with PyODBC. The connection to database is established alright; however, when I try to fetch result, I ran into this error "Invalid literal for Decimal: u''". Help please.

I am on RHEL6, with Python 2.7.3

Here is the code and result:

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''
4

4 に答える 4

2

このエラーが発生しましたが、pyodbc が 64 ビットであるのに対し、teradata ドライバーは 32 ビットであることが原因であることがわかりました。この問題は、unixodbc で新しいドライバーを構築した後に解決されました。

于 2014-11-03T18:42:30.690 に答える
0

http://code.google.com/p/pyodbc/issues/detail?can=1&q=teradata&id=146に従って、すぐに使用できる pyodbc が機能しない可能性があることがわかりました

そのスレッドの修正が機能することを確認しました。https://github.com/mkleehammer/pyodbcを確認し、setup.py にコマンドを追加して再コンパイルすると、動作するように見えます。

于 2013-03-07T00:17:57.453 に答える
0

null 文字が「?」に設定されている場合 (これがデフォルトだと思います)またはその他の奇妙なことは、特にPythonにヒットしたデータを操作している場合、これが返る際の問題になる可能性があります。

于 2013-08-12T22:52:17.860 に答える