Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ODBC十进制错误_Python_Python 2.7_Odbc_Pyodbc_Vertica - Fatal编程技术网

Python ODBC十进制错误

Python ODBC十进制错误,python,python-2.7,odbc,pyodbc,vertica,Python,Python 2.7,Odbc,Pyodbc,Vertica,我一直在寻找解决这个错误的方法,但我仍在努力。我正在使用Python2.7VENV和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.fe

我一直在寻找解决这个错误的方法,但我仍在努力。我正在使用Python2.7VENV和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.
基本上,当它试图从指定查询中的数据库获取数据时,它会出错。我尝试过过滤空结果和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-'
回溯(最近一次呼叫最后一次):
文件“myodbcscript.py”,第29行,在
rows=cursor.fetchall()
文件“/opt/python-2.7.3/lib/python2.7/decimal.py”,第548行,新__
十进制的无效文本:%r“%value”)
文件“/opt/python-2.7.3/lib/python2.7/decimal.py”,第3866行,出现错误
提出错误(解释)
decimal.InvalidOperation:十进制的无效文字:u'1-'

按照评论中的要求,我试图连接的DBMS是Vertica,问题不在于Vertica本身,在那里查询工作正常。正是CentOS 6.4、python 2.7 venv和Vertica 6.1驱动程序的结合导致了这种奇怪的行为。事实证明,我正在将我的date_列转换为一个历元,这样做的结果没有被正确读取。如果只返回数值列,但如果我引入了varchar列,则效果很好。

您要连接到哪个DBMS?如果您在查询中只选择十进制列1会怎么样?还是出错了?如果您只选择decimal_col2怎么办?如果一次只取一行呢?错误是发生在第一次提取时还是其他地方?你的连接字符串是什么样子的(当然不包括用户名和密码)?好吧,我试着只做单列,有趣的是,如果我同时使用这3个列,它会起作用:日期列,十进制列1,decimal_col2,它对每一列都单独起作用,但是如果我尝试选择varchar_列和其他列中的任何一列,我得到的错误实际上@StevenRumbalski你的方法真的很有用。如果我同时使用date_列+varchar_列,出于某种原因会抛出错误。我把date_col转换成一个varchar,它就工作了。看起来很奇怪,但是谢谢你的想法!如果您至少指出您正在使用的DBMS,这可能会对未来的读者有所帮助。我刚刚尝试在Windows上使用Python 2.7.5、pyodbc 3.0.7和SQL Server Native Client 10.0重新创建您的问题,但您的代码对我来说运行良好。尝试将该十进制转换为浮点或字符串类型,稍后在Python端修复此问题。我认为这会起作用,尽管它很难看。可能相关: