【问题标题】:Issue with querying Teradata in Python/Pyodbc在 Python/Pyodbc 中查询 Teradata 的问题
【发布时间】:2012-12-25 14:20:07
【问题描述】:

我正在尝试使用 PyODBC 在 Python 中查询 Teradata 数据库。 与数据库的连接建立正常;但是,当我尝试获取结果时,我遇到了这个错误“十进制的无效文字: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''

【问题讨论】:

  • 看起来驱动程序需要一个定点数并返回一个空字符串。您的表架构是什么样的?它应该返回哪一行?
  • 感谢您的提问 - 它帮助我在需要处理结果集的 Python 脚本中设置了 Teradata 数据库连接 :)。
  • 你改变了什么?无论如何,我都遇到了同样的问题

标签: python teradata


【解决方案1】:

我遇到了这个错误,我发现原因是pyodbc是64位的,而我的teradata驱动程序是32位。使用unixodbc构建新驱动程序后问题得到解决。

【讨论】:

    【解决方案2】:

    在 setup.py 中强制使用正确的语言环境(在编译之前)对我有用,例如:

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

    【讨论】:

      【解决方案3】:

      我发现开箱即用的 pyodbc 可能无法按照 http://code.google.com/p/pyodbc/issues/detail?can=1&q=teradata&id=146 工作

      我验证了该线程中的修复工作。查看https://github.com/mkleehammer/pyodbc,在 setup.py 中添加额外的命令,重新编译,它似乎可以工作了。

      【讨论】:

      【解决方案4】:

      如果您的空字符设置为“?” (我相信这是默认设置)或任何其他奇怪的东西,这可能是返回的问题,特别是如果你在处理数据时遇到 python。

      【讨论】:

        猜你喜欢
        • 2014-12-24
        • 2016-10-18
        • 2023-03-23
        • 2018-02-09
        • 2014-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多