python脚本:从Excel读取数据插入oracle数据库

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)

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值