2013-01-11 37 views
10

Tôi đang cố truy vấn cơ sở dữ liệu Teradata bằng Python với PyODBC. Kết nối với cơ sở dữ liệu được thiết lập ổn định; tuy nhiên, khi tôi cố gắng lấy kết quả, tôi đã gặp phải lỗi này "Không hợp lệ cho chữ thập phân: u ''". Xin vui lòng giúp đỡ.Vấn đề với truy vấn Teradata bằng Python/Pyodbc

Tôi đang trên RHEL6, với Python 2.7.3

Đây là đoạn mã và kết quả:

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

Có vẻ như người lái xe đang mong đợi một số điểm cố định và lấy lại một chuỗi rỗng. Sơ đồ bảng của bạn trông như thế nào? Hàng nào nên trở về? – cmd

+1

Cảm ơn câu hỏi của bạn - nó đã giúp tôi thiết lập kết nối cơ sở dữ liệu Teradata trong tập lệnh Python cần làm việc với các tập kết quả :). – Jubbles

Trả lời

0

tôi thấy rằng pyodbc out of the box có thể không làm việc như trên http://code.google.com/p/pyodbc/issues/detail?can=1&q=teradata&id=146

Tôi đã xác minh bản sửa lỗi trong chuỗi đó hoạt động. Hãy xem https://github.com/mkleehammer/pyodbc, thêm các lệnh bổ sung vào setup.py, biên dịch lại và nó có vẻ hoạt động.

+0

Liên kết vấn đề đã chết, có thể bây giờ là https://code.google.com/archive/p/pyodbc/issues/146? – Nickolay

0

Nếu ký tự null của bạn được đặt thành '?' (mà tôi tin là mặc định) hoặc bất cứ điều gì khác lạ này có thể là một vấn đề với trở về, đặc biệt là nếu bạn đang làm việc với dữ liệu khi nó chạm python.

1

Buộc locale ngay trong setup.py (trước khi biên soạn) đã làm các trick cho tôi, ví dụ:

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

Tôi có lỗi này, và tôi thấy nguyên nhân là pyodbc là 64 bit, trong khi tôi trình điều khiển teradata là 32. Vấn đề đã được giải quyết sau khi xây dựng một trình điều khiển mới với unixodbc.

Các vấn đề liên quan