Python pandas-cdecimal.ConversionSyntax读取sql查询无效操作()
在处理数据库十进制数据类型时,Pandas read_sql_查询函数有问题。在使用varchar或integer类型时,我对下面相同的代码没有任何问题 版本信息: 下面是我尽可能减少代码以复制错误。我也尝试过通过sqlalchemy,但也遇到了同样的错误。netezza没有sqlalchemy引擎,因此它仍然需要依赖pyodbcPython pandas-cdecimal.ConversionSyntax读取sql查询无效操作(),python,pandas,Python,Pandas,在处理数据库十进制数据类型时,Pandas read_sql_查询函数有问题。在使用varchar或integer类型时,我对下面相同的代码没有任何问题 版本信息: 下面是我尽可能减少代码以复制错误。我也尝试过通过sqlalchemy,但也遇到了同样的错误。netezza没有sqlalchemy引擎,因此它仍然需要依赖pyodbc import pyodbc import pandas as pd connection = pyodbc.connect("Driver={NetezzaSQL
import pyodbc
import pandas as pd
connection = pyodbc.connect("Driver={NetezzaSQL};servername=nzserver;database=MASTER;username=USER_GUY;password=****")
sql = "select cast(0.0 as decimal(6,2)) as testing "
data = pd.io.sql.read_sql_query(sql, connection, index_col=None, coerce_float=True)
#Also tried this, same error
data = pd.io.sql.read_sql_query(sql, connection, index_col=None, coerce_float=False)
---------------------------------------------------------------------------
InvalidOperation Traceback (most recent call last)
<ipython-input-217-ba167303e6b2> in <module>()
1
----> 2 data = pd.io.sql.read_sql_query(sql, connection, index_col=None, coerce_float=True)
3 # InvalidOperation: [<class 'cdecimal.ConversionSyntax'>]
4
看起来这是一个已知的pyodbc。那里有一个补丁,你可以试试。甚至还有来自netezza的评论。好的,所以我让Pandas read_sql_查询处理netezza十进制数据类型。我是通过从pyodbc切换到pyodbc来实现的 我注意到unicode在结果中有一些奇怪的地方,所以我在PyODBC中向connection对象传递了一些额外的参数,现在看起来一切正常。我需要更改数据库输出/消息的unicode_results=False和ansi=true。。。但我认为我可以接受,因为我的数据应该符合ASCII,我甚至不确定新西兰对unicode的支持程度 从查询到data.frame的工作代码如下:
仅供参考,我还尝试了read_sql。。。同样的错误。呃,那是从2012年开始的。。。我会把补丁拔出来,看看能不能拼凑些东西。祝你好运!如果让它工作,请考虑将修改后的文件放在GITHUB上,并将链接放回到这里。
import pyodbc
import pandas as pd
connection = pyodbc.connect("Driver={NetezzaSQL};servername=nzserver;database=MASTER;username=USER_GUY;password=****")
sql = "select cast(0.0 as decimal(6,2)) as testing "
data = pd.io.sql.read_sql_query(sql, connection, index_col=None, coerce_float=True)
#Also tried this, same error
data = pd.io.sql.read_sql_query(sql, connection, index_col=None, coerce_float=False)
---------------------------------------------------------------------------
InvalidOperation Traceback (most recent call last)
<ipython-input-217-ba167303e6b2> in <module>()
1
----> 2 data = pd.io.sql.read_sql_query(sql, connection, index_col=None, coerce_float=True)
3 # InvalidOperation: [<class 'cdecimal.ConversionSyntax'>]
4
import pypyodbc
import pandas as pd
connection = \
pypyodbc.connect(
"Driver=NetezzaSQL;SERVERNAME=nzserver;DATABASE=MASTER;PORT=5480;USERNAME=user_guy;PASSWORD=******",
ansi=True,
unicode_results=False)
sql = """select
cast(0.0 as decimal(6,2)) as decimal_test,
cast(0 as integer) as int_test,
cast('aosenuth' as varchar(5)) as varchar_test ,
current_timestamp as timestamp_test """
data = pd.io.sql.read_sql_query(sql, connection, index_col=None, coerce_float=True)
print data.shape