import osimport pandas as pdimport oracledb# ================== Oracle 连接 ==================conn = oracledb.connect( user="数据库用户名", password="密码", dsn="127.0.0.1/orcl")cursor = conn.cursor()# ================== 基本参数 ==================data_dir = r"C:\Users\Administrator\Desktop\导入数据中心表中"table_name = "ODS_BASY_202504_09"batch_size = 1000# ================== 遍历 Excel 文件 ==================for file_name in os.listdir(data_dir): if not file_name.lower().endswith(".xlsx"): continue file_path = os.path.join(data_dir, file_name) print(f"\n开始导入文件:{file_name}") try: # 1. 读取 Excel df = pd.read_excel( file_path, dtype=str, engine="openpyxl" ) df.columns = df.columns.str.strip() df = df.fillna("") df = df.applymap(lambda x: x[:300] if isinstance(x, str) else x) # 2. 构造 SQL(按 Excel 列名) columns = df.columns.tolist() insert_sql = f""" INSERT INTO {table_name} ({",".join(columns)}) VALUES ({",".join([f":{i+1}"for i inrange(len(columns))])}) """ data = df.values.tolist() # 3. 分批插入 for i in range(0, len(data), batch_size): cursor.executemany( insert_sql, data[i:i + batch_size], batcherrors=True ) conn.commit() # 4. 打印错误行(如有) errors = cursor.getbatcherrors() if errors: print(f"⚠ {file_name} 存在 {len(errors)} 条错误记录:") for err in errors[:5]: print(f" 行号 {err.offset},错误:{err.message}") else: print(f"✅ {file_name} 导入成功,行数:{len(data)}") except Exception as e: conn.rollback() print(f"❌ 文件 {file_name} 导入失败:{e}")# ================== 关闭连接 ==================cursor.close()conn.close()print("\n全部文件处理完成")