1. 环境准备
1.1. 安装python3环境
1.2. 安装ide
1.3. 安装instantclient
1、访问oracle官网
Instant Client for Microsoft Windows (x64) 64-bit
2、选择一个版本,下载以下包:
- Basic Package
- SQL*Plus Package
- SDK Package
- JDBC Supplement Package
- ODBC Package
3、把5个压缩包解压到同一个文件夹
4、把解压后的文件夹路径配置到path环境变量
1.4. 使用pip3下载python库pandas、cx_Oracle
1、pandas用于解析Excel文件
2、cx_Oracle用于连接oracle数据库
pip3 install pandas cx_Oracle
2. 核心逻辑
1、从Excel读取数据,组装sql语句
2、连接数据库,执行sql语句
import pandas
import cx_Oracle
from utils.log_util import logger
class InsertFromFile:
def __init__(self):
# 数据库连接信息
# makedsn('oracle数据库ip', '数据库端口', '数据库名')
self.dsn = cx_Oracle.makedsn('127.0.0.1', '1521', 'oracle')
self.username = 'test' # 数据库用户名
self.password = '12345' # 数据库密码
def insert_from_excel(self, excel_file_path, table_name):
# excel_file_path Excel文件路径
# table_name 数据库表名
# 读取Excel文件,excel文件第一行填写的列名需要与数据库字段名一致
df = pandas.read_excel(excel_file_path, skiprows=0)
try:
# 连接到Oracle数据库
# 建议使用try处理数据库错误
with cx_Oracle.connect(self.username, self.password, self.dsn) as connection:
cursor = connection.cursor()
# 假设DataFrame的列与数据库表的列一一对应
# 构建插入语句的占位符
columns = ', '.join(df.columns)
placeholders = ', '.join([f':{col}' for col in df.columns])
# 插入数据的SQL语句
insert_query = f"INSERT INTO {table_name} ({columns}) VALUES ({placeholders})"
# 将DataFrame的数据逐行插入数据库
for index, row in df.iterrows():
print(tuple(row)) # print 可替换为记录日志
cursor.execute(insert_query, tuple(row))
# # 提交事务
connection.commit()
print("Data inserted successfully.")
except cx_Oracle.Error as e:
print(e)
insert = InsertFromFile()
3. 使用示例
3.1. 数据源Excel
1、Excel第一行,作为列名,需要与数据库字段名一致
例如:
- ID:数据id
- NAME:姓名
- TEL:电话
- AGE:年龄
- BIRTHDAY:生日
2、针对于不同类型数据
- ID、AGE:数字,直接填写
- NAME:文本数据,直接填写
- TEL:需要处理为文本的数字,加引号
- BIRTHDAY:日期类型,使用标准日期格式,pandas解析时会处理为日期数据
3.2. 执行脚本
把Excel文件绝对路径和数据表名称作为参数,传入insert_from_excel方法
excel_file_path = 'D:\\WorkSpace\\PyWork\\oracle_insert\\data\\新建 Microsoft Excel 工作表.xlsx'
table_name = 'P_INFO'
insert.insert_from_excel(excel_file_path, table_name)