Проблема с запросом Teradata в Python/Pyodbc

Я пытаюсь запросить базу данных Teradata в Python с PyODBC. Соединение с базой данных хорошо налажено; однако, когда я пытаюсь получить результат, я столкнулся с этой ошибкой "Недопустимый литерал для Decimal: u". Помогите пожалуйста.

Я нахожусь на RHEL6, с Python 2.7.3

Вот код и результат:

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

Ответ 1

Принудительный правильный язык в setup.py(перед компиляцией) помогло, например:

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

Ответ 2

У меня была эта ошибка, и я обнаружил, что причина в том, что pyodbc был 64 бит, тогда как мой драйвер teradata был 32. Проблема была решена после создания нового драйвера с помощью unixodbc.

Ответ 4

Если ваш нулевой символ установлен на '?' (который, по моему мнению, является дефолтом) или что-то еще странное, это может быть проблемой с возвратом, особенно если вы работаете с данными, когда он попадает на python.