当前位置: 首页 > article >正文

Python脚本:不同Oracle库的表进行读写

准备工作:

①下载cx_Oracle、pandas、numpy包;

pip install cx_Oracle
pip install pandas
pip install numpy

②已知两库的连接信息;

库1的主要为读数据表,并将表内容进行条件转换

sql = ('SELECT NAME, SEX, AGE, PROVINCE, RANK, INCOME, BELONG_PROJECT, REPORT_TIME, '
       'APPROVER, APPROVAL_STATUS, SERVICE_RATING FROM REIMBURSEMENT_FIFTY_THOUSAND WHERE ROWNUM <= 10')

conn_govern_dev = cx_Oracle.connect(数据库1的连接信息)
cursor_govern_dev = conn_govern_dev.cursor()

# 读取govern_dev库的表
df = pd.read_sql(sql, conn_govern_dev)

# 性别为男切换为boy,女切换为girl
def myfunc_sex(x):
    if x == '男':
        return 'boy'
    elif x == '女':
        return 'girl'
    else:
        return 'maybe'

df['SEX'] = df['SEX'].map(myfunc_sex)

# 对工资列,低于1万的乘以3,加一个值,高于1万的除以2,加另外一个值
def myfunc_income(x, *args, **args_dict):
    if x < 10000:
        return x * 3 + args_dict['high']
    else:
        return x / 2 + args_dict['low']

df['INCOME'] = df['INCOME'].apply(myfunc_income, low=0.2, high=0.1)

cursor_govern_dev.close()
conn_govern_dev.close()

库2的操作就是将库1的表进行写入

conn_test = cx_Oracle.connect(数据库2的连接信息)

df_array = np.array(df)  # dataframe转换array
df_list = df_array.tolist()  # array转换list
# print(df_list)
sql = ('insert into REIMBURSEMENT_FIFTY_THOUSAND(NAME, SEX, AGE, PROVINCE, RANK, '
       'INCOME, BELONG_PROJECT, REPORT_TIME, APPROVER, APPROVAL_STATUS, SERVICE_RATING) '
       'values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11)')
cur = conn_test.cursor()
# 写入test库的表
cur.executemany(sql, df_list)
cur.close()
conn_test.commit()
conn_test.close()

完整代码


# -*- coding: utf8 -*-
import cx_Oracle
import pandas as pd
import numpy as np

sql = ('SELECT NAME, SEX, AGE, PROVINCE, RANK, INCOME, BELONG_PROJECT, REPORT_TIME, '
       'APPROVER, APPROVAL_STATUS, SERVICE_RATING FROM REIMBURSEMENT_FIFTY_THOUSAND WHERE ROWNUM <= 10')

conn_govern_dev = cx_Oracle.connect(库1的链接信息)
cursor_govern_dev = conn_govern_dev.cursor()

# 读取govern_dev库的表
df = pd.read_sql(sql, conn_govern_dev)

# 性别为男切换为boy,女切换为girl
def myfunc_sex(x):
    if x == '男':
        return 'boy'
    elif x == '女':
        return 'girl'
    else:
        return 'maybe'

df['SEX'] = df['SEX'].map(myfunc_sex)

# 对工资列,低于1万的乘以3,加一个值,高于1万的除以2,加另外一个值
def myfunc_income(x, *args, **args_dict):
    if x < 10000:
        return x * 3 + args_dict['high']
    else:
        return x / 2 + args_dict['low']

df['INCOME'] = df['INCOME'].apply(myfunc_income, low=0.2, high=0.1)

cursor_govern_dev.close()
conn_govern_dev.close()

conn_test = cx_Oracle.connect(库2的链接信息)

df_array = np.array(df)  # dataframe转换array
df_list = df_array.tolist()  # array转换list
# print(df_list)
sql = ('insert into REIMBURSEMENT_FIFTY_THOUSAND(NAME, SEX, AGE, PROVINCE, RANK, '
       'INCOME, BELONG_PROJECT, REPORT_TIME, APPROVER, APPROVAL_STATUS, SERVICE_RATING) '
       'values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11)')
cur = conn_test.cursor()
# 写入test库的表
cur.executemany(sql, df_list)
cur.close()
conn_test.commit()
conn_test.close()


http://www.kler.cn/a/511179.html

相关文章:

  • 架构思考与实践:从通用到场景的转变
  • 创建 pdf 合同模板
  • postgres数据库中_varchar的数组存储方法如何查找
  • Typora + PowerShell 在终端打开文件
  • 基于海思soc的智能产品开发(高、中、低soc、以及和fpga的搭配)
  • 华为数据中心CE系列交换机级联M-LAG配置示例
  • 新手学习MAML的基础解析
  • uniapp button 去除边框
  • 几个Linux系统安装体验(续): 统信桌面系统
  • 数据库高可用方案-05-备份与恢复
  • Android 10.0 自定义Window窗口层级新增Type类型功能实现
  • 在 C++ 中实现调试日志输出
  • 图像去雾数据集的下载和预处理操作
  • ElasticSearch是什么?基于Lucene的,那么为什么不是直接使用Lucene呢?
  • 如何设置HTTPS站点防御?
  • Java 0115学习总结
  • mysql的主从同步
  • Go-知识 版本演进
  • RV1126+FFMPEG推流项目(10) FFMPEG 时间概念的讲解
  • 【数据结构】人生如栈
  • ESP32-C3物联网芯片方案,设备智能化交互联动,无线通信控制技术
  • SpringBoot详解
  • Ubuntu 24.04 LTS 空闲硬盘挂载到 文件管理器的 other locations
  • 确保移动设备上机器学习的安全性:挑战与最佳实践
  • 查看jar包,被哪些地方引用,并排包
  • CKS认证 | 使用kubeadm部署K8s高可用集群(v1.26)