【问题标题】:pandas read_sql_query returns negative and incorrect values for Oracle Database number field containing positive valuespandas read_sql_query 为包含正值的 Oracle 数据库编号字段返回负值和错误值
【发布时间】:2017-06-06 14:24:32
【问题描述】:

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

许多 Oracle 表中的字段的数据类型为 NUMBER(15, 0),其值为无符号值。当我从该字段中检索数据时,DataFrame 将数据报告为int64,但 DataFrame 值的位数为 9 位或更少,并且全部为负数。所有的值都改变了——我假设某个地方发生了整数溢出。

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

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

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

【问题讨论】:

    标签: python sql oracle pandas dataframe


    【解决方案1】:

    删除 pandas 并仅使用 cx_Oracle 仍会导致整数溢出,因此在我使用的 SQL 查询中:
    CAST(field AS NUMBER(19))

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

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      相关资源
      最近更新 更多