Python ODBC十进制错误

时间:2014-10-10 15:27:16

标签: python python-2.7 odbc pyodbc vertica

我已经找到了这个错误的解决方案,但我仍然在罢工。我正在使用python 2.7 venv和pyodbc 3.0.6

connection = pyodbc.connect(myconnstring)
cursor = connection.cursor()
cursor.execute("""SELECT varchar_column, date_column as epoch, decimal_col1, decimal_col2
FROM   table;""")
rows = cursor.fetchall()
#do some more stuff down here with rows.

当它试图从指定的查询中的数据库中获取数据时,它基本上会出错。我已经尝试过滤掉null结果和0结果,这没有帮助。我已经尝试将它转换为varchar并使用isnull来捕获任何没有数据的东西,似乎没有任何区别。

我已经尝试在数据库中运行查询并返回正常,如果我尝试过滤空值,结果完全相同,因此实际上没有空结果。如果我过滤掉0,那么大约有100行,但即使我从脚本中取出它,它仍然会抛出一个对我没有意义的错误。

Traceback (most recent call last):
  File "myodbcscript.py", line 29, in <module>
    rows = cursor.fetchall()
  File "/opt/python-2.7.3/lib/python2.7/decimal.py", line 548, in __new__
    "Invalid literal for Decimal: %r" % value)
  File "/opt/python-2.7.3/lib/python2.7/decimal.py", line 3866, in _raise_error
    raise error(explanation)
decimal.InvalidOperation: Invalid literal for Decimal: u'1-'

根据评论中的要求,我尝试连接的DBMS是Vertica,问题不在于Vertica本身,查询在那里工作正常。这是CentOS 6.4,python 2.7 venv和Vertica 6.1驱动程序的组合,导致了这种奇怪的行为。事实证明我将date_column转换为一个纪元,这样做的结果就是没有正确读取。如果仅使用数字列返回它,但如果我引入了varchar列,那么它工作正常。

0 个答案:

没有答案