pandas read_sql_query为包含正值的Oracle Database number字段返回负值和不正确的值

时间:2017-06-06 14:24:33

标签: python sql oracle pandas dataframe

我正在运行pandas GLUT和cx_Oracle 6.0b2来从我继承到DataFrame的Oracle数据库中检索数据。

许多Oracle表中的字段具有带无符号值的数据类型read_sql_query。当我从此字段中检索数据时,DataFrame会将数据报告为NUMBER(15, 0),但DataFrame值的数字为9位或更少,并且都是负数。所有的值都发生了变化 - 我假设某个地方发生了整数溢出。

如果我在SQL查询中使用int64转换数据库值,然后在DataFrame上使用pandas to_char,则值为to_numeric并且正确。

我正在使用Python 3.6.1 x64和pandas 0.20.1。 int64_USE_BOTTLENECK

如何在不使用False的情况下从表中检索正确的值?

1 个答案:

答案 0 :(得分:1)

删除pandas并且只使用cx_Oracle仍导致整数溢出,所以在我正在使用的SQL查询中:
CAST(field AS NUMBER(19))

目前我只能猜测NUMBER(11)NUMBER(18)之间的任何字段都需要明确CASTNUMBER(19)以避免溢出。