我可以从 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()
任何帮助将不胜感激。非常感谢。
为了让 Oracle 理解数字是浮点格式,您需要将其转换为文本格式并用逗号替换点。在 Oracle 中格式为 NUMBER 的表中,它会被很好地添加。
要修改您的号码,您可以执行以下操作:
df["column1"] = df["column1"].astype(str).str.replace('.', ',')
如果您有多列包含浮点数据,则必须分别对每一列执行此方法。