Python进行Oracle与Mysql不同数据库类型之间的数据diff
分享主题:如何利用Python 进行 Oracle 与 Mysql 不同数据库类型之间的数据 diff
一、适用场景
项目工作中,可能会有 A 类型数据库数据需要迁移到 B 类型的数据库中的需求。例如:假设现有一个数据库的迁移需求,是将 Oracle 数据库里的数据迁移至 Mysql 数据库中。 常规的测试方法是人工去抽样检测数据进行 diff,因为数据量太大,人工不可能实现全量数据的肉眼 diff。
因此,为提高数据 diff 的正确性以及测试效率,编写测试脚本进行全量迁移数据的 diff 是十分必要的。以下内容将会着重讲解如何使用 Python 编写脚本来实现 Oracle 与 Mysql 这种不同类型数据库之间数据的 diff。
二、代码实现
1、连接oracle数据库并获取要提取的数据,并输出列表里面嵌入的字典类型的数据 1#coding=utf-8 2import cx_Oracle 3import pymysql 4 5 6def get_oracle(): 7 conn = cx_Oracle.connect("user", "123456", "10.7.51.34:1521/server") 8 cursor=conn.cursor() 9 10 sql="SELECT NAME_CODE as id ,INDUSTRY_CODE as certificate_no FROM NAME_20201129 WHERE NAME_ID=1" 11 resList1=cursor.execute(sql).fetchall() 12 # print(resList1) 13 columns=[c[0] for c in cursor.description] 14 # print(columns) 15 lastlist=[] 16 for res in resList1: 17 resluts=dict(zip(columns,res)) 18 lastlist.append(resluts) 19 print(lastlist) 20 cursor.close
2、连接mysql数据库并获取要提取的数据,并输出列表里面嵌入的字典类型的数据 1def get_mysql(): 2 db = pymysql.connect("10.7.36.42", "root", "123456", "test") 3 cursor = db.cursor() 4 sql="select id,certificate_no from test.ticket where id=1" 5 try: 6 resultList = [] 7 cursor.execute(sql) 8 result = cursor.fetchall() 9 columns = cursor.description 10 for val in result: 11 tempDict = {} 12 for cloNum in range(len(columns)): 13 tempDict[str(columns[cloNum][0]).upper()] = str(val[cloNum]).upper() 14 resultList.append(tempDict) 15 print(resultList) 16 return resultList 17 except: 18 print("Error: unable to fetch data") 19 cursor.close() 20 db.close()
3、Oracle 与 Mysql 数据库进行 diff,直接调用上面两个方法即可 1if __name__ == "__main__": 2 get_mysql() 3 get_oracle()
4、执行后的输出结果 1[{"ID": "82", "CERTIFICATE_NO": "1CS004398439896"}] 2[{"ID": "CO300006484390", "CERTIFICATE_NO": "CON"}]
三、总结以上代码只是做了一个 diff 的雏形演示,希望能给小伙伴起到抛砖引玉的效果,大家在参考时可以根据自己的需求去做更符合业务场景的 diff 验证。 今天分享的内容实操性比较强,Python 实现代码都是干货,建议动手实操更有助于加深理解哟~