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()
相关推荐
旦莫6 分钟前
Python 教程:我们可以给 Python 文件起中文名吗?
开发语言·python
豌豆花下猫23 分钟前
Python 潮流周刊#99:如何在生产环境中运行 Python?(摘要)
后端·python·ai
小杨40427 分钟前
python入门系列二十(peewee)
人工智能·python·pycharm
弧襪27 分钟前
FlaskRestfulAPI接口的初步认识
python·flaskrestfulapi
船长@Quant29 分钟前
文档构建:Sphinx全面使用指南 — 进阶篇
python·markdown·sphinx·文档构建
cloudy49132 分钟前
强化学习:历史基金净产值,学习最大化长期收益
python·强化学习
Bruce_Liuxiaowei43 分钟前
使用Python脚本在Mac上彻底清除Chrome浏览历史:开发实战与隐私保护指南
chrome·python·macos
ruyingcai6666661 小时前
用python进行OCR识别
开发语言·python·ocr
Niuguangshuo1 小时前
Python设计模式:MVC模式
python·设计模式·mvc
TOMGRIL1 小时前
文件的读取操作
python