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()
相关推荐
feifeigo1237 分钟前
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
数据库·mysql·adb
狐凄8 分钟前
Python实例题:基于 Python 的简单聊天机器人
开发语言·python
悦悦子a啊1 小时前
Python之--基本知识
开发语言·前端·python
火龙谷2 小时前
【nosql】有哪些非关系型数据库?
数据库·nosql
焱焱枫2 小时前
Oracle获取执行计划之10046 技术详解
数据库·oracle
笑稀了的野生俊3 小时前
在服务器中下载 HuggingFace 模型:终极指南
linux·服务器·python·bash·gpu算力
Naiva3 小时前
【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)
ide·python·pycharm
路来了3 小时前
Python小工具之PDF合并
开发语言·windows·python
蓝婷儿4 小时前
Python 机器学习核心入门与实战进阶 Day 3 - 决策树 & 随机森林模型实战
人工智能·python·机器学习
qq_392397124 小时前
Redis常用操作
数据库·redis·wpf