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

准备工作:

①下载cx_Oracle、pandas、numpy包;

python 复制代码
pip install cx_Oracle
pip install pandas
pip install numpy

②已知两库的连接信息;

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

python 复制代码
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的表进行写入

python 复制代码
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()

完整代码

python 复制代码
# -*- 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()
相关推荐
zhangguojia731 分钟前
权限弹窗点击允许的授权流程
运维·服务器·数据库
jnrjian38 分钟前
Postgres 序列(sequence)的权限
数据库·postgresql
风禾万里39 分钟前
【无标题】
数据库
镜舟科技41 分钟前
为什么 Text-to-SQL 总是停在 Demo?
数据库·sql·demo·text-to-sql·镜舟科技·mip·语义视图
人生苦短1281 小时前
Oracle RAC 日常管理+排错命令大全
数据库·oracle
镜舟科技1 小时前
从 DBA 经验到 Agent:镜舟如何构建生产级智能排障体系
数据库·agent·dba·skill·devops agent·mirrorship
瀚高PG实验室1 小时前
HAC 集群主节点状态在starting、running之间频繁切换
运维·数据库·postgresql·瀚高数据库
其实防守也摸鱼1 小时前
教育信息技术应用创新---基础软件信息赛
运维·服务器·数据库·github·copilot
GG-_-Bond1 小时前
9.1-kv存储持久化的设计
数据库
智购科技自动售卖机厂家1 小时前
2026自动售货机库存热力图分析:从设备分布到补货优先级的数据可视化实践~YH
大数据·python·信息可视化