一.导入表结构。使用工具:navicate premium 和PowerDesinger

1. 先用navicate premium把oracle中的数据库导出为oracle脚本。

2. 在PowerDesinger里找到 File -->> Reverse Engineer --->> Database 将数据库导入到模型。

3  在.PowerDesinger里找到Database”--->“Change Current DBMS” 将数据库由oracle转换为mysql

4. 在PowerDesinger里 按快捷键ctrl+G导出mysql的sql文件

5  用navicate premium 将脚本文件导入到mysql中。

(如果要导入的是oracle的dmp文件,请参阅 https://my.oschina.net/dolphinboy/blog/739248)

二.导入数据。 使用工具python 2.7 cx_Oracle  mysql-python

在本例中oracle字符集为gbk, mysql字符集为 utf-8 在导入过程中进行了字符集转换。

导入程序代码如下:

#encoding:utf-8
import sys
import MySQLdb
import mysqlHelper
import cx_Oracle
import oracleHelper reload(sys)
sys.setdefaultencoding( "utf-8" )
def mig_database():
sql="select table_name from user_tables"
oraHelper=oracleHelper.OracleHelper()
rows=oraHelper.queryAll(sql)
for row in rows:
print row["TABLE_NAME"]
mig_table(row["TABLE_NAME"]) def mig_table(table_name):
file_object = open('log.txt','a+')
print "开始迁移"+table_name+"......"
file_object.write("开始迁移"+table_name+"......\n")
myhelper=mysqlHelper.MySQLHelper()
oraHelper=oracleHelper.OracleHelper()
myhelper.selectDb("nap")
myhelper.query("delete from "+table_name)
rows=oraHelper.queryAll("select * from "+table_name)
n=0
try:
for row in rows:
dict=convertDict(row)
myhelper.selectDb("nap")
myhelper.insert(table_name,dict)
n=n+1
myhelper.commit()
print table_name+"迁移完毕,共导入%d条数据。" %n
file_object.write(table_name+"迁移完毕,共导入%d条数据。\n" %n)
except MySQLdb.Error as e:
print table_name+"迁移失败,程序异常!"
file_object.write("table_name"+"迁移失败,程序异常!\n" %n)
print e
file_object.close() def convertDict(row):
dict={}
for k in row.keys():
#if isinstance(row[k],basestring):
if isinstance(row[k],str) or isinstance(row[k],unicode):
dict[k]= unicode2utf8(gbk2unicode(row[k]))
#dict[k]=row[k]
else:
dict[k]=row[k]
return dict def gbk2unicode(s):
return s.decode('gbk', 'ignore') def unicode2utf8(s):
return s.encode('utf-8') if __name__ == '__main__':
mig_database()
#encoding:utf-8
import MySQLdb
from datetime import *
class MySQLHelper:
#def __init__(self,host,user,password,charset="utf8"):
def __init__(self):
self.host='localhost'
self.user='root'
self.password=''
self.charset='utf8'
try:
self.conn=MySQLdb.connect(host=self.host,user=self.user,passwd=self.password)
self.conn.set_character_set(self.charset)
self.cur=self.conn.cursor()
except MySQLdb.Error as e:
print("Mysql Error %d: %s" % (e.args[0], e.args[1])) def selectDb(self,db):
try:
self.conn.select_db(db)
except MySQLdb.Error as e:
print("Mysql Error %d: %s" % (e.args[0], e.args[1])) def query(self,sql):
try:
n=self.cur.execute(sql)
return n
except MySQLdb.Error as e:
print("Mysql Error:%s\nSQL:%s" %(e,sql))
raise e def queryRow(self,sql):
self.query(sql)
result = self.cur.fetchone()
return result def queryAll(self,sql):
self.query(sql)
result=self.cur.fetchall()
desc =self.cur.description
d = []
for inv in result:
_d = {}
for i in range(0,len(inv)):
_d[desc[i][0]] = str(inv[i])
d.append(_d)
return d def insert(self,p_table_name,p_data):
for key in p_data:
if (isinstance(p_data[key],str) or isinstance(p_data[key],datetime) ):
if str(p_data[key])=="None":
p_data[key]='null'
else:
p_data[key] = "'"+str(p_data[key]).replace('%','%').replace('\'','')+"'"
else:
p_data[key] = str(p_data[key]) key ='`'+ '`,`'.join(p_data.keys())+'`'
value = ','.join(p_data.values())
real_sql = "INSERT INTO " + p_table_name + " (" + key + ") VALUES (" + value + ")"
return self.query(real_sql)
def getLastInsertId(self):
return self.cur.lastrowid def rowcount(self):
return self.cur.rowcount def commit(self):
self.conn.commit() def close(self):
self.cur.close()
self.conn.close()
#encoding:utf-8
import cx_Oracle
from datetime import *
class OracleHelper:
def __init__(self):
self.charset='utf8'
try:
self.conn = cx_Oracle.connect('scott/tiger@DESKTOP-IASSOVJ/orcl')
self.cur=self.conn.cursor()
except cx_Oracle.Error as e:
print("Mysql Error %d: %s" % (e.args[0], e.args[1])) def selectDb(self,db):
try:
self.conn.select_db(db)
except cx_Oracle.Error as e:
print("Mysql Error %d: %s" % (e.args[0], e.args[1])) def query(self,sql):
try:
n=self.cur.execute(sql)
return n
except cx_Oracle.Error as e:
print("Mysql Error:%s\nSQL:%s" %(e,sql))
raise e def queryRow(self,sql):
self.query(sql)
result = self.cur.fetchone()
return result def queryAll(self,sql):
self.query(sql)
result=self.cur.fetchall()
desc =self.cur.description
d = []
for inv in result:
_d = {}
for i in range(0,len(inv)):
_d[desc[i][0]] = str(inv[i])
d.append(_d)
return d def insert(self,p_table_name,p_data):
for key in p_data:
if (isinstance(p_data[key],str) or isinstance(p_data[key],datetime) ):
if str(p_data[key])=="None":
p_data[key]='null'
else:
p_data[key] = "'"+str(p_data[key]).replace('%','%').replace('\'','')+"'"
else:
p_data[key] = str(p_data[key]) key = ','.join(p_data.keys())
value = ','.join(p_data.values())
real_sql = "INSERT INTO " + p_table_name + " (" + key + ") VALUES (" + value + ")"
return self.query(real_sql)
def getLastInsertId(self):
return self.cur.lastrowid def rowcount(self):
return self.cur.rowcount def commit(self):
self.conn.commit() def close(self):
self.cur.close()
self.conn.close()

python将oracle中的数据导入到mysql中。的更多相关文章

  1. talend 将hbase中数据导入到mysql中

    首先,解决talend连接hbase的问题: 公司使用的机器是HDP2.2的机器,上面配置好Hbase服务,在集群的/etc/hbase/conf/hbase-site.xml下,有如下配置: < ...

  2. 使用Python将Excel中的数据导入到MySQL

    使用Python将Excel中的数据导入到MySQL 工具 Python 2.7 xlrd MySQLdb 安装 Python 对于不同的系统安装方式不同,Windows平台有exe安装包,Ubunt ...

  3. shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中

    shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中 利用shell脚本将文本数据导入到mysql中 需求1:处理文本中的数据,将文本中的数据插入到mys ...

  4. 如何使用免费控件将Word表格中的数据导入到Excel中

    我通常使用MS Excel来存储和处理大量数据,但有时候经常会碰到一个问题—我需要的数据存储在word表格中,而不是在Excel中,这样处理起来非常麻烦,尤其是在数据比较庞大的时候, 这时我迫切地需要 ...

  5. phpexcel的写操作将数据库中的数据导入到excel中

    这个版本据说是可以支持excel2007,但是我使用2007编辑的xlsx是无法获得该库的支持.于是乎我就将它转化为2003.感觉支持地很好. 下面介绍一下具体的使用: require_once('. ...

  6. C# 将List中的数据导入csv文件中

    //http://www.cnblogs.com/mingmingruyuedlut/archive/2013/01/20/2849906.html C# 将List中的数据导入csv文件中   将数 ...

  7. 如何将数据库中的数据导入到Solr中

    要使用solr实现网站中商品搜索,需要将mysql数据库中数据在solr中创建索引. 1.需要在solr的schema.xml文件定义要存储的商品Field. 商品表中的字段为: 配置内容是: < ...

  8. 小技巧之“将Text文件中的数据导入到Excel中,这里空格为分割符为例”

    1.使用场景 将数据以文本导出后,想录入到Excel中,的简便方案, 起因:对于Excel的导出,Text导出明显会更方便些 2.将Text文件中的数据导入到Excel中,这里空格为分割符为例的步骤 ...

  9. Sql Server中的数据类型和Mysql中的数据类型的对应关系(转)

    Sql Server中的数据类型和Mysql中的数据类型的对应关系(转):https://blog.csdn.net/lilong329329/article/details/78899477 一.S ...

随机推荐

  1. Linux ntpdate命令详解

    ntpdate命令用于同步更新互联网时间,或者NTP服务器时间 NTP服务器[Network Time Protocol(NTP)]是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源 ...

  2. 数据库初始化以及制作为Windows服务

    前面的博客里我讲述了一些安装过程中会出现的问题以及解决方法,下面我讲一下基本的操作. 1.初始化:(我们要现在数据库里面创建一个data文件,这里是存放数据的地方,所以要是重要的数据已经记得看清楚了删 ...

  3. 生成器-yield初接触

    什么是生成器? 生成器的实质就是迭代器 在python中有三种方式来获取生成器 1. 通过生成器函数 2. 通过各种推导式实现生成器 3. 通过数据的转换也可以获取生成器 将函数中的return换成y ...

  4. ZT linux的mount(挂载)命令详解

    linux的mount(挂载)命令详解   来源:互联网 作者:佚名 时间:09-08 17:02:27 [大 中 小] 点评:linux下挂载(mount)光盘镜像文件.移动硬盘.U盘.Window ...

  5. scrapy爬虫框架之Xpath选择器

    问题: 本篇博文主要记录scrapy框架爬取伯乐在线文章的相关知识,在实践中学习对框架的理解.今天主要记录了xpath的相关用法以及语法规范. ----->>>点击进入爬取页面 一. ...

  6. 【001】JS解析,反解析XML的一些问题

    JS解析,反解析 XML 的一些问题 2016-03-25 15:38:28 星期五 文章底部下面有提供把 字符串 变成 XML 对象的方法. 该方法,在 Chrome48 ,FireFox ,IE1 ...

  7. 【目录】利用Python进行数据分析(第2版)

    第一章 准备工作 1.1 What Is This Book About(这本书是关于什么的) 1.2 Why Python for Data Analysis?(为什么使用Python做数据分析) ...

  8. was集群下基于接口分布式架构和开发经验谈

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luozhonghua2014/article/details/34084935    某b项目是我首 ...

  9. JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释 (生动形象)

    [转自]:https://blog.csdn.net/sd4015700/article/details/50109939 jvm区域总体分两类,heap区和非heap区.heap区又分:Eden S ...

  10. Spring常用jar包的功能

    jar名称 描述 spring-framework.jar spring框架比较完整的功能,core+aop+ioc+transaction spring-core.jar 基本上的核心工具类,一些u ...