我已经找到了这个错误的解决方案,但我仍然在罢工。我正在使用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列,那么它工作正常。