将带有浮点值的 pandas 数据框插入 Oracle

问题描述 投票:0回答:1

我可以从 pandas 数据帧将整数、字符串等普通值插入 Oracle,但是当我尝试 float 类型值时,sqlalchemy 给出以下错误

sqlalchemy.exc.ArgumentError: Oracle FLOAT types use 'binary precision', which does not convert cleanly from decimal 'precision'.  Please specify this type with a separate Oracle variant, such as Float(precision=53).with_variant(oracle.FLOAT(binary_precision=176), 'oracle'), so that the Oracle specific 'binary_precision' may be specified accurately.

这是完整的源代码

import pandas as pd
import os
import sqlalchemy as sa
from sqlalchemy import text
from sqlalchemy.dialects import oracle


oracle_db = sa.create_engine('oracle://username:password@instance/?service_name=MBCDFE')
conn = oracle_db.connect()
df = pd.DataFrame({
    #"column1": [1, 1, 1], #- inserting into DB works with just numbers
    "column1": [1.2, 1.2, 1.2],
    "column2": ["a", "bb", "c"],
    "column3": ["K", "L", "M"]
})

df.to_sql("python", conn, if_exists="replace", index=True)
conn.commit()
conn.close()

任何帮助将不胜感激。非常感谢。

python pandas dataframe sqlalchemy cx-oracle
1个回答
0
投票

为了让 Oracle 理解数字是浮点格式,您需要将其转换为文本格式并用逗号替换点。在 Oracle 中格式为 NUMBER 的表中,它会被很好地添加。

要修改您的号码,您可以执行以下操作:

df["column1"] = df["column1"].astype(str).str.replace('.', ',')

如果您有多列包含浮点数据,则必须分别对每一列执行此方法。

© www.soinside.com 2019 - 2024. All rights reserved.