利用Python脚本实现Oracle与MySQL之间数据迁移

前面有几遍文章使用kettle等ETL工具来做数据迁移,但是现在Python很流行,Python编码也特简单,所以就写个Python脚本来实现数据迁移 ,大家可以关注微信公众号

但不限于Python岗位(内推哦),欢迎诸位老铁切磋交流~~。

微信扫描下方二维码,获取详细2021年上半年面试题目答案。并且回复Python面试题

import cx_Oracle
import pymysql
import os
import time
#说明:本脚本用于Oracle与MySQL之间的数据迁移
#注意:源表与目标表字段数量必须一致
#使用:脚本默认是从MySQL迁移到Oracle,如果想从Oracle迁移到MySQL,修改source_db,target_db,source_db_type,target_db_type就行
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'    #设置字符集为UTF8,防止中文乱码
source_db = pymysql.connect("192.168.56.101","scott","tiger","test")   #源库
target_db = cx_Oracle.connect('scott/tiger@192.168.3.13/orcl')#目标库
source_db_type='MySQL' #大小写无关,后面会被转为大写
target_db_type='Oracle'#大小写无关,后面会被转为大写
cur_select = source_db.cursor()  #源库查询对象
cur_insert = target_db.cursor()   #目标库插入对象
cur_select.arraysize = 500
cur_insert.arraysize=500
source_table=input("请输入源表名称:")   #从键盘获取源表名称
target_table=input("请输入目标表名称:") #从键盘获取目标表名称
if source_db_type.upper()=='ORACLE':
 get_column_length='select * from '+source_table+' where rownum<=1' #拼接获取源表有多少个列的SQL
elif source_db_type.upper()=='MYSQL':
 get_column_length='select * from ' + source_table + ' limit 1'  # 拼接获取源表有多少个列的SQL
cur_select.execute(get_column_length)  #执行
col_len=len(cur_select.fetchone())     #获取源表有多少个列
val_str = ''
if target_db_type.upper()=='MYSQL':
 for i in range (1,col_len):
  val_str=val_str+'%s'+','
 val_str=val_str+'%s'     #MySQL批量插入语法是 insert into tb_name values(%s,%s,%s,%s)
elif target_db_type.upper()=='ORACLE':
 for i in range (1,col_len):
  val_str=val_str+':'+str(i)+','
 val_str=val_str+':'+str(col_len)     #Oracle批量插入语法是 insert into tb_name values(:1,:2,:3)
insert_sql='insert into '+target_table+' values('+val_str+')'  #拼接insert into 目标表 values  #目标表插入语句
select_sql='select * from '+source_table  #源查询SQL,如果有where过滤条件,在这里拼接
cur_select.execute(select_sql) #执行
print('开始执行:',time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
while True:
 rows=list(cur_select.fetchmany(500))     #每次获取500行,由cur_select.arraysize值决定,MySQL fetchmany 返回的是 tuple 数据类型 所以用list做类型转换
 cur_insert.executemany(insert_sql, rows) #批量插入每次500行,需要注意的是 rows 必须是 list [] 数据类型
 target_db.commit()           #提交
 if not rows:
     break              #中断循环
cur_select.close()
cur_insert.close()
source_db.close()
target_db.close()
print('执行成功:',time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python MySQL数据迁移是指将一个数据库中的数据迁移到另一个数据库中,通常用于备份、升级或者迁移数据的需求。在Python中,可以使用多种方式进行MySQL数据迁移,下面是一种常见的方法: 1. 安装MySQL驱动:首先需要安装PythonMySQL驱动,可以使用`pip`命令进行安装,例如:`pip install mysql-connector-python`。 2. 连接源数据库:使用MySQL驱动连接源数据库,获取源数据库的连接对象。可以使用`mysql.connector.connect()`方法来建立连接,传入相应的参数,如主机名、用户名、密码等。 3. 连接目标数据库:同样地,使用MySQL驱动连接目标数据库,获取目标数据库的连接对象。 4. 执行查询语句:通过源数据库的连接对象,执行查询语句来获取需要迁移数据。可以使用`cursor()`方法获取游标对象,然后使用`execute()`方法执行查询语句。 5. 获取查询结果:使用游标对象的`fetchall()`方法获取查询结果,将结果保存在一个变量中。 6. 插入数据:通过目标数据库的连接对象,执行插入语句将查询结果插入到目标数据库中。同样地,使用游标对象的`execute()`方法执行插入语句。 7. 提交事务:在插入完所有数据后,使用目标数据库连接对象的`commit()`方法提交事务,确保数据被正确保存。 8. 关闭连接:最后,关闭源数据库和目标数据库的连接,释放资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youyouxiong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值