Python学习只十五_不同类型数据库表内容比较


前言

最近学习力总结了很多Python相关的内容
本次想继续学习一下不同数据库之间的数据比较. 这样理论上可以极大的缩减不同数据库测试成本.
感谢Python 以及之前大拿的各种资料.
这个学习还是表简单与单纯.
理论上可以通过标准SQL将输入进行一些转换.
将不通数据库类型进行一定程度的同类型处理.
比较会更加有效果
本次demo 仅是验证了varchar类型的比较.

其他说明

本次考虑的范围是 不同类型数据库下
相同表结构的表的数据对比.
本次范例是: Oracle数据库与信创神通数据库的对比
其他数据库类似.
需要注意不建议使用完全一样的连接工具.
比如Oracle我选用了cx-Oracle
神通我选用了 jaydebeapi
如果完全相同, 可能会有一些异常. 需要严格一直的查询SQL.
这样便于数据出结果.
理论上可以选用不通的数据库查询SQL
可以通过SQL后缀的方式进行处理. 后续可以增加异常判断, 事务处理等.

其他需要的资料

Oracle的instant client
oscar的驱动
配置文件主要如下:
数据库表查询的SQL:
建议有排序, 有具体列, 避免因为列顺序不一致,排序不一致影响结果
数据库连接字符串:
不同数据库的连接字符串不一样. 通过configparser的方式进行构造和读取.

Python源码

import cx_Oracle
import configparser
from sqlalchemy import create_engine
import jaydebeapi
import os
os.environ['path'] = r'D:\work\instantclient_12_2' config = configparser.ConfigParser()
config.read('oscar.ini',encoding='utf-8') ip = config.get('cx', 'ip')
port = config.get('cx', 'port')
uname = config.get('cx', 'uname')
pwd = config.get('cx', 'pwd')
tnsname = config.get('cx', 'tnsname')
dsnStr = cx_Oracle.makedsn(ip, port, service_name=tnsname)
connect_str = "oracle://%s:%s@%s" %(uname, pwd, dsnStr)
engine = create_engine(connect_str)
connoracle = cx_Oracle.connect(uname, pwd, dsn=dsnStr) jdbcString = config.get('OSCAR', 'jdbcString')
driverPath = config.get('OSCAR', 'driverPath')
urlString = config.get('OSCAR', 'urlString')
userName = config.get('OSCAR', 'userName')
passWord = config.get('OSCAR', 'passWord')
connoscar = jaydebeapi.connect(jdbcString, urlString, [userName, passWord], driverPath) comparesql = configparser.ConfigParser()
comparesql.read('comparesql.ini',encoding='utf-8') alloptions = comparesql.options('SQL')
print("本次要对比的所有数据库表如下: ")
print(alloptions)
for i in alloptions :
getsql = comparesql.get('SQL', i)
curoracle = connoracle.cursor()
curoracle.execute(getsql)
oracleresult = curoracle.fetchall() curoscar = connoscar.cursor()
curoscar.execute(getsql)
oscarresult = curoscar.fetchall() if oracleresult == oscarresult :
print("Oracle和OSCAR的 " + f"{i:20}" + " 是相同的" )
else :
print("Oracle和OSCAR的 " + f"{i:20}" + " 是不同的") curoscar.close()
curoracle.close()

Python学习之十五_不同类型数据库表内容比较的更多相关文章

  1. Python学习第二十五课——Mysql (多表查询)

    多表查询: 内连接查询: 首先:创建两个表一个为tableA,一个为tableB,并且插入数据(代码省略) 同时查询两个表的记录: select * from tableA,tableB; 根据tab ...

  2. python 学习笔记十五 django基础

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  3. python学习第十五天 -面向对象之继承和多态

    大家都知道面向对象的三大特性:封装,继承,多态.封装特性在上一章节已经讲解过.这一章节主要讲解继承和多态. 继承: 当定义一个类的时候,可以从现有的类进行继承.那么新定义的类可以称为子类,被继承的现有 ...

  4. Python 学习 第十五篇:模块搜索路径和包导入

    在导入自定义的模块时,除了指定模块名之外,也需要指定目录,由于Python把目录称作包,因此,这类导入被称为包导入.包导入把计算机上的目录变成Python的命名空间,而目录中所包含的子目录和模块文件则 ...

  5. Python学习第十五篇——类继承和类实例化

    学习Python类时,我们明白了类的本质,以及所谓的面向对象编程思想强调的对事物本身的属性,我们对某一类事物进行描述——采用了很多方法,这些方法描述了类的属性(比如猫科动物的眼睛,四肢,是否哺乳类等等 ...

  6. Python学习札记(十五) 高级特性1 切片

    参考: 高级特性 切片 Note 1.掌握了Python的基础语法之后,就可以写出很多很有用的程序了,比如打印1-90的奇数: #!/usr/bin/env python3 L = [] n = 1 ...

  7. python学习笔记(五)数值类型和类型转换

    Python中的数值类型有: 整型,如2,520 浮点型,如3.14159,1.5e10 布尔类型 True和False e记法: e记法即对应数学中的科学记数法 >>> 1.5e1 ...

  8. python 学习笔记十五 web框架

    python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自 ...

  9. python学习笔记十五:日期时间处理笔记

    #-*- coding: utf-8 -*- import datetime #给定日期向后N天的日期 def dateadd_day(days): d1 = datetime.datetime.no ...

  10. Python笔记(二十五)_魔法方法_描述符

    描述符的属性方法 __get__(self, instance, owner): 用于访问属性,返回属性的值 __set__(self, instance, value): 用于给属性赋值时,返回属性 ...

随机推荐

  1. python在容器内克隆拉取git私有仓库

    前言 目前有个python应用需要在容器镜像内拉取git私有仓库的代码,一开始的想法是用GitPython,折腾一番ssh私钥和known_hosts问题后,发现还是在镜像中封装个git最省事,然后用 ...

  2. 探索 Linux Namespace:Docker 隔离的神奇背后

    在 深入理解 Docker 核心原理:Namespace.Cgroups 和 Rootfs 一文中我们分析了 Docker 是由三大核心技术实现的. 今天就一起分析 Docker 三大核心技术之一的 ...

  3. 编译安装openssl-1.1.1和openssh-9.4

    1.安装 openssl-1.1.1 先处理下opensll的版本,以免编译安装Openssh环境异常: yum remove openssl cd /opt wget https://www.ope ...

  4. Prometheus 与 VictoriaMetrics对比

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享 时序数据库有很多,比如Prometheus.M3DB.TimescaleDB.OpenTSDB.InfluxDB等等.Pro ...

  5. 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 11.认识GAS & 创建自己的能力系统

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本篇文章对应Lecture 16 - Writing our own Gameplay Ability Syst ...

  6. 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 08.创建主HUD & 自定义作弊指令

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本篇文章对应课程Lecture 14 ,56-58节.本篇文章将会教你将之前创建的各种UMG控件统合到一个主控件 ...

  7. 神经网络优化篇:理解指数加权平均数(Understanding exponentially weighted averages)

    理解指数加权平均数 回忆一下这个计算指数加权平均数的关键方程. \({{v}_{t}}=\beta {{v}_{t-1}}+(1-\beta ){{\theta }_{t}}\) \(\beta=0. ...

  8. 标注BIO-精灵标注助手

    目录 准备待标注数据 将待标数据生成文件 数据标注 下载标注软件 创建项目 标注数据 导出数据 ANN 转 BIO 推荐使用 Label Studio 准备待标注数据 创建 raw_data.txt ...

  9. ThreadPoolExecutor 使用

    ThreadPoolExecutor 介绍 简写: package com.vipsoft.Thread; import java.util.concurrent.*; import java.uti ...

  10. Spark面试题(六)——Spark资源调优

    Spark系列面试题 Spark面试题(一) Spark面试题(二) Spark面试题(三) Spark面试题(四) Spark面试题(五)--数据倾斜调优 Spark面试题(六)--Spark资源调 ...