返回顶部
首页 > 资讯 > 数据库 >MySql Oracle数据互导简例(P
  • 517
分享到

MySql Oracle数据互导简例(P

数据MySqlOracle 2023-01-31 02:01:26 517人浏览 安东尼
摘要

工作需要,简单的写了一个互导的小功能,对于量大的数据处理还有待优化多的不说了,直接上代码,需要的可以看看代码注释欢迎批评指正 :)##coding=utf8 #单线程,分批导入 #Author : Jeen @ 2013

工作需要,简单的写了一个互导的小功能,对于量大的数据处理还有待优化

多的不说了,直接上代码,需要的可以看看代码注释

欢迎批评指正 :)


##coding=utf8
#单线程,分批导入
#Author : Jeen @ 2013-7
import os,sys,Mysqldb,cx_oracle,math,time  # python version 2.7.5
os.environ['NLS_LANG']="AMERICAN_AMERICA.AL32UTF8"
reload(sys)
sys.setdefaultencoding('utf8')
fromto = 'mysql2oracle' # mysql2oracle : Export Data FROM Mysql To Oracle
#fromto = 'oracle2mysql' # oracle2mysql : Export Data FROM Oracle To Mysql
from_tables = [ #导出的 表 名称
'P1_WJ_TEST_LANG_SHOP',
'P1_WJ_TEST_LANG_PRODUCT',
'P1_WJ_TEST_LANG_PRODUCT_IMAGE'
] # Data Export From
to_tables = from_tables # Data Import To #导入的 表 名称
#注意:表名需按顺序对应 表名可以不一样  但表结构必须一致  如果需要保留 ID 请修改 get_columns 方法中的相关字符串替换代码
rows_limit = 1000    #分批导入  建议设置不要超过 8000
time_sleep = 1      #分批导入之后等待  n 秒
#-Mysql Database Config
mysql_host = '127.0.0.1'
mysql_user = 'spider'
mysql_pass = 'spider'
mysql_dbname = 'spider'
mysql_port = 3306
#-Oracle Database Config
oracle_host = '192.168.1.222'
oracle_user = 'spider'
oracle_pass = 'spider'
oracle_sid = 'xe'#服务名
oracle_port = 1521
def get_columns(results,coltype) :  #构建部分查询语句的方法
        if len(results) == 0 : return ''
        t = ''
        for result in results :
            t += ', `'+''.join(result) +'`' #mysql 中需要用到的特殊字符
        mysql_columns = t.replace(', `ID`, ','') #移除自增的 ID 列
        oracle_columns = mysql_columns.replace('`','') #Oracle中  去除特殊符号
        if coltype == 'from_mysql' :
            return mysql_columns
        elif coltype == 'from_oracle' :
            return oracle_columns
        elif coltype == 'to_mysql' :
            t = oracle_columns.split(',')
            for i in range(len(t)) :
                t[i] = '%s'
            return  ' ('+mysql_columns+') values ('+','.join(t)+') ' #构建mysql 插入 SQL 片段
        elif coltype == 'to_oracle' :
            t = oracle_columns.split(',')
            for i in range(len(t)) :
                t[i] = ':'+str(i)
            return  ' ('+oracle_columns+') values ('+','.join(t)+') ' #构建Oracle 插入 SQL 片段
        else :
            return ''
try :
    # connect to Mysql
    mysql_conn = MySQLdb.connect(host=mysql_host,user=mysql_user,passwd=mysql_pass,port=mysql_port,db=mysql_dbname,charset='utf8')
    # connect to Oracle
    oracle_dsn = cx_Oracle.makedsn(oracle_host,oracle_port,oracle_sid)
    oracle_conn = cx_Oracle.connect(oracle_user,oracle_pass,oracle_dsn)
    #完成数据库连接
    if fromto == 'mysql2oracle' : # Data from Mysql to Oracle
        for i in range(len(from_tables)) : #循环载入需要导的表
            from_tb = from_tables[i] #导出表
            to_tb = to_tables[i] #导入表
            mysql_cur = mysql_conn.cursor()
            #sql = "select COLUMN_NAME from infORMation_schema.columns where table_name='"+from_tb+"'"
            # 获取 mysql 表 列名, 如希望使用上述SQL方法  请重构 columns_name 的值
            sql = "select * from "+from_tb+" limit 0"
            mysql_cur.execute(sql); #print mysql_cur.description
            columns_name = [col[0] for col in mysql_cur.description] ; #print columns_name
            columns = get_columns(columns_name,'from_mysql'); #print columns
            if columns == '' : raise EOFError('columns error')
            sql = "select count(*) from "+from_tb; #print sql;#统计行数
            mysql_cur.execute(sql)
            results = mysql_cur.fetchone()
            rows_count = results[0]
            mysql_cur.close()
            print 'Total %s rows from Table:%s found in Mysql:%s .\r\nThis program will select %s time(s)(limit %s rows per time) \r\n ... | Start ...' % (rows_count,from_tb,mysql_dbname,int(math.ceil(float(rows_count)/rows_limit)),rows_limit)
            j = 0
            #分批导入
            while j*rows_limit < rows_count :
                mysql_cur = mysql_conn.cursor()
                #构建查询语句
                sql = "select %s from %s limit %s,%s" % (columns,from_tb,j*rows_limit,rows_limit);  #print sql;
                mysql_cur.execute(sql) #执行查询
                results = mysql_cur.fetchall() #保存查询结果
                mysql_cur.close()
                for record in results: #循环读取查询结果
                    oracle_cur = oracle_conn.cursor()
                    sql = "insert into " + to_tb + get_columns(columns_name,'to_oracle') #构建插入语句
                    oracle_cur.execute(sql,record)  #执行插入
                    oracle_conn.commit() #提交
                    oracle_cur.close()
                j += 1; print 'The (%s)th import end. (%s)rows..' % (j,len(results))
                time.sleep(time_sleep) #wait for several seconds
            print 'Data import to table:' + to_tb + ' in Oracle:'+oracle_sid+'    |  Complete ~!  \r\n '
        print '\r\nAll Tables Import Complete ~!' #完成导入
                                     
    #以下部分为 Oracle 导入到Mysql的 逻辑代码, 请直接忽略
    elif fromto == 'oracle2mysql' : # Data from Oracle to Mysql
        for i in range(len(from_tables)) :
            from_tb = from_tables[i]
            to_tb = to_tables[i]
            oracle_cur = oracle_conn.cursor()
            #sql = "select c.column_name from SYS.ALL_CONS_COLUMNS c where c.owner='"+oracle_user+"' and c.table_name='"+from_tb+"'"
            # 获取 Oracle 表 列名, 如希望使用上述SQL方法  请重构 columns_name 的值
            sql = "select * from "+from_tb+" where rownum<1"
            oracle_cur.execute(sql)
            columns_name = [col[0] for col in oracle_cur.description] ;#print columns_name
            columns = get_columns(columns_name,'from_oracle'); #print columns
            if columns == '' : raise EOFError('columns error')
            sql = "select count(*) from "+from_tb; #print sql;
            oracle_cur.execute(sql)
            results = oracle_cur.fetchone()
            rows_count = results[0]
            oracle_cur.close()
            print 'Total %s rows from Table:%s found in Oracle:%s .\r\nThis program will select %s time(s)(limit %s rows per time) \r\n ... | Start ...' % (rows_count,from_tb,oracle_sid,int(math.ceil(float(rows_count)/rows_limit)),rows_limit)
            j = 0
            while j*rows_limit < rows_count :
                oracle_cur = oracle_conn.cursor()
                sql = "select %s from (select rownum rn,%s from %s where rownum <= %s) where rn > %s" % (columns,columns,from_tb,(j+1)*rows_limit,j*rows_limit);  #print sql;
                oracle_cur.execute(sql)
                results = oracle_cur.fetchall()
                oracle_cur.close()
                for record in results:
                    mysql_cur = mysql_conn.cursor()
                    sql = "insert into " + to_tb + get_columns(columns_name,'to_mysql')
                    mysql_cur.execute(sql,record)
                    mysql_conn.commit()
                    mysql_cur.close()
                j += 1; print 'The (%s)th import end.(%s)rows ..' % (j,len(results))
                time.sleep(time_sleep) #wait for several seconds
            print 'Data import to table:' + to_tb + ' in Mysql:'+mysql_dbname+'    |  Complete ~!  \r\n '
        print '\r\nAll Tables Import Complete ~!'
    else :
        print "unknow value of 'fromto' \r\nmake sure 'fromto' like 'mysql2oracle' or 'oracle2mysql' ...."
    #-close database connection
    mysql_conn.close()
    oracle_conn.close()
except EOFError,e :
    print e
finally :
    print 'Database Export/Import Python Code Excute End...\r\nBye~'
    #os.system('PAUSE')


您可能感兴趣的文档:

--结束END--

本文标题: MySql Oracle数据互导简例(P

本文链接: https://lsjlt.com/news/186330.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySql Oracle数据互导简例(P
    工作需要,简单的写了一个互导的小功能,对于量大的数据处理还有待优化多的不说了,直接上代码,需要的可以看看代码注释欢迎批评指正 :)##coding=utf8 #单线程,分批导入 #Author : Jeen @ 2013...
    99+
    2023-01-31
    数据 MySql Oracle
  • ORACLE和MYSQL怎么互相导入数据
    这篇文章主要讲解了“ORACLE和MYSQL怎么互相导入数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ORACLE和MYSQL怎么互相导入数据”吧! ...
    99+
    2024-04-02
  • mysql数据库和oracle数据库之间互相导入备份的示例分析
    小编给大家分享一下mysql数据库和oracle数据库之间互相导入备份的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!把...
    99+
    2024-04-02
  • MYSQL导入示例数据库
    也可以到 https://dev.mysql.com/doc/index-other.html 这个页面下载,或点击这个链接 http://downloads.mysql.com/docs/sakila-db.zip 直接下载。 下载的安...
    99+
    2019-04-02
    MYSQL导入示例数据库
  • 使用DataX实现mysql与hive数据互相导入导出
    一、概论 1.1 什么是DataX          DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各种异...
    99+
    2023-09-26
    大数据
  • Oracle数据导入导出基本操作示例
    Oracle数据导入导出基本操作示例数据导出a.将数据库orcl完全导出,用户名user 密码password 导出到D:\dc.dmp中     exp user/passw...
    99+
    2024-04-02
  • MySQL数据导入导出的示例分析
    这篇文章主要介绍MySQL数据导入导出的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1).mysql import的语法介绍:mysqlimport位于mysql/bin目...
    99+
    2024-04-02
  • oracle 数据导入导出
    I am the new of Oracle , and that i need to learn more about it . But as you know , here is the company...
    99+
    2024-04-02
  • oracle数据与文本导入导出源码示例
    oracle提供了sqlldr的工具,有时需要讲数据导入到文本,oracle的spool可以轻松实现。 方便的实现oracle导出数据到txt、txt导入数据到oracle。 一、导出数据到txt 用...
    99+
    2024-04-02
  • MySQL 表数据的导入导出操作示例
    本文实例讲述了MySQL 表数据的导入导出操作。分享给大家供大家参考,具体如下: 数据导出   使用 SELECT ...INTO OUTFILE ...命令来导出数据,具体语法如...
    99+
    2022-05-11
    MySQL 表数据 导入导出
  • Mysql和Oracle数据库连接数简析
    这篇文章主要介绍“Mysql和Oracle数据库连接数简析”,在日常操作中,相信很多人在Mysql和Oracle数据库连接数简析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • HBase和HDFS数据互导程序
    下面说说JAVA API 提供的这些类的功能和他们之间有什么样的联系。1.HBaseConfiguration关系:org.apache.hadoop.hbase.HBaseConfiguration作用:...
    99+
    2024-04-02
  • Oracle/MySQL数据快速导入MySQL的方法
    Oracle/MySQL数据快速导入MySQL的方法 Cyberverse 2019-04-28 12:02:22 2947 收藏 3 分类专栏: java成长之路 版权 本地Oracle安装请移步: 本地Oracle服务一栈式解决方案&常...
    99+
    2016-04-16
    Oracle/MySQL数据快速导入MySQL的方法
  • Python脚本监控mysql数据库,P
    任务:应帅气的领导要求,需要监控生产环境mysql和mongo数据库服务。不仅要connect successful还要进行数据交互进一步确认数据库服务正常。 思路:mysql和mongo 数据库ip、端口、用户名、密码、认证库(mongo...
    99+
    2023-01-31
    脚本 数据库 Python
  • Oracle之数据泵导入/导出数据
    以前习惯用imp/exp导入导出数据,现在我们来搞一把数据泵导入导出的方法。它比之于imp/exp的方式的优点自不必说---速度快! 但是很不幸,我在导出数据的时候报错了,我擦,这特么就尴尬了。于是,神技乍...
    99+
    2024-04-02
  • Python实现MySql数据库交互的示例
    目录一、使用mysql进行持久化存储二、安装MySql数据库和python库PyMySQL三、使用pymysql链接mysql数据库四、创建表五、插入数据六、后记一、使用MySql进行持久化存储 在任何应用中,都需要持久...
    99+
    2023-01-06
    PythonMySql数据库交互 PythonMySql交互
  • java连接oracle数据库简单实例
    package cn.com.login.dao; import java.sql.Connection; import java.sql.DriverManager; im...
    99+
    2024-04-02
  • MySQL导入格式化数据的简单方法
    下文给大家带来MySQL导入格式化数据的简单方法有关内容,相信大家一定看过类似的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完MySQL导入格式化数据的简单方法你一定会有所收获。 ...
    99+
    2024-04-02
  • ORACLE 数据泵如何导入导出数据
    这篇文章给大家分享的是有关ORACLE 数据泵如何导入导出数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、摘要在平常备库和数据库迁移的时候,当遇到大的数据库的时候在用exp...
    99+
    2024-04-02
  • 怎么将oracle数据导入到mysql中
    本篇文章为大家展示了怎么将oracle数据导入到mysql中,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。    1、在PL/SQL中用sele...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作