Python学习之二:不同数据库相同表是否相同的比较方法

济南小老虎 / 2023-05-12 / 原文

摘要

昨天学习了使用python进行数据库主键异常的查看.
当时想我们有跨数据库的数据同步场景.
对应的我可以对不同数据库的相同表的核心字段进行对比.
这样的话能够极大的提高工作效率. 
我之前写过很长时间的shell.昨天跟着同事开始学python.
感觉的确用python能够节约大量的时间. 
生活中必须要挑战自己. 做更好的自己. 

思路

设置一个进行数据库连接构件的function.
先将基准数据查询出来放到一个基准的list 里面
然后设置一个循环. 循环内调用此function
然后循环内将数据取出, 对基准数据进行比较.
相同则输出数据数据库实例编号. is same.
不相同输出数据库实例实例编号. is different.

dbconnection function

# coding=utf-8
# 设置编码格式

import jaydebeapi
import configparser
import datetime
# 引入需要的包

config = configparser.ConfigParser()
# 定义配置对象
config.read('su.ini',encoding='utf-8')
def getconn(dbinstance) :
# 读取配置文件 形参传入信息
    jdbcString = config.get(dbinstance,'jdbcString')
    driverPath = config.get(dbinstance,'driverPath')
    urlString = config.get(dbinstance,'urlString')
    userName = config.get(dbinstance,'userName')
    passWord = config.get(dbinstance,'passWord')
    conn = jaydebeapi.connect(jdbcString,urlString,[userName,passWord],driverPath)
    return conn

dbcompare function

# coding=utf-8

import jaydebeapi
import configparser
import datetime
import dbconnection

conn = dbconnection.getconn('bf')
getsql="select id,code from xxxuser  order by code "
cur = conn.cursor()
cur.execute(getsql)
usercode = cur.fetchall()

for i in ['DB01','DB02','DB03','DB04','DB05'] :
    conntest = dbconnection.getconn(i)
    curtest = conntest.cursor()
    curtest.execute(getsql)
    usercodetest = curtest.fetchall()
    print(str(i))
    if usercode == usercodetest:
        print("User Code is Same")
    else:
        print("User Code is Different")
for i in usercode :
    print(str(i[0]) + " " + str(i[1]))