You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将CSV数据导入Oracle数据库?解决报错问题

解决Python导入CSV到Oracle数据库的报错问题

核心错误原因梳理

  • ORA-01036: illegal variable name/number:cx_Oracle不支持?作为占位符,需使用:1/:2这类位置占位符;同时number、date是Oracle保留关键字,列名必须用双引号包裹才能正确解析。
  • executemany参数错误:该方法必须传入SQL语句和参数列表两个参数,且参数需为序列的序列(如列表的列表)。
  • DataFrame遍历错误:直接for r in csv遍历的是DataFrame的列名,而非行数据,需用itertuples()或iterrows()获取行内容。

方案一:cx_Oracle + pandas 手动批量插入

import cx_Oracle
import pandas as pd

# 建立数据库连接
conn_str = "spark/pass@localhost:1521/orcl"
conn = cx_Oracle.connect(conn_str)
curs = conn.cursor()

# 读取CSV并转换为批量插入格式
csv_df = pd.read_csv('C:/Users/user/Downloads/products.csv')
data_list = csv_df.values.tolist()

# 修正SQL:保留字列名加双引号,使用cx_Oracle兼容的占位符
insert_sql = """
INSERT INTO PRODUCTS("number", "date", "code", "price")
VALUES(:1, :2, :3, :4)
"""

# 批量插入并提交
curs.executemany(insert_sql, data_list)
conn.commit()

# 关闭资源
curs.close()
conn.close()

方案二:pandas to_sql 简洁导入

利用pandas内置方法自动处理批量逻辑,无需手动操作游标:

import pandas as pd
from sqlalchemy import create_engine

# 创建Oracle连接引擎
engine = create_engine('oracle+cx_oracle://spark:pass@localhost:1521/orcl')

# 读取CSV(若日期列格式异常,可添加parse_dates=['date']参数转换)
csv_df = pd.read_csv('C:/Users/user/Downloads/products.csv')

# 导入数据库
csv_df.to_sql(
    name='PRODUCTS',
    con=engine,
    if_exists='append',  # 可选:append(追加)/replace(替换表)/fail(存在则报错)
    index=False,  # 不导入DataFrame的索引列
    chunksize=1000  # 分块插入,避免大文件内存溢出
)

注意事项

  1. 确保CSV列顺序与Oracle表列顺序完全匹配(方案一)。
  2. 方案二需先安装依赖:pip install sqlalchemy。
  3. 提前验证Oracle表的字段类型与CSV数据类型兼容,如日期列需确保格式可被Oracle识别。

内容的提问来源于stack exchange,提问作者SpaEngi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:15:30