工作中我们经常需要对比数据库中两张表的数据是否有差异,以下代码通过pymsql对两张表的数据进行简单对比,可以记录新旧表的数据总数,以及两张表中有差异的数据。

应用场景:旧表中数据迁移到新表

运行结果:打印出旧表中有,但是新表中没有的数据(迁移失败的数据),可以指定需要对比的字段

import pymysql

import logging

# 设定日志级别

logging.basicConfig(

level=logging.DEBUG

)

# 旧数据库

conn_old = pymysql.connect(host="localhost",

user="usr",

password="pwd",

db="db",

port=3306,

charset="utf8")

# 新数据库

conn_new = pymysql.connect(host="host",

user="usr",

password="pwd",

db="db",

port=3306,

charset="utf8")

# 新旧表字段存放在二维列表中

def db_diff(tb_new, tb_old, *tb_field):

"""

:param tb_new: 新表

:param tb_old: 旧表

:param tb_field: [[新表中字段,],[对应旧表中的字段,]]

:return: 返回新旧表中的数据总量,以及旧表中存在,但是在新表中没有找到的数据

"""

# 校验数据总量是否一致

cmp_new_sql = "select count(*) from " + tb_new + ";"

cmp_old_sql = "select count(*) from " + tb_old + ";"

logging.debug(cmp_new_sql)

logging.debug(cmp_old_sql)

cursor_old = conn_old.cursor()

cursor_new = conn_new.cursor()

cursor_new.execute(cmp_new_sql)

cursor_old.execute(cmp_old_sql)

new_num = cursor_new.fetchone()

old_num = cursor_old.fetchone()

if new_num == old_num:

logging.info(tb_new + "和" + tb_old + "数据量相同:" + new_num)

else:

logging.error({tb_new + "_new": new_num[0], tb_old: old_num[0]})

# 校验各字段值是否一致

field_new = ", ".join(tb_field[0][0])

field_old = ", ".join(tb_field[0][1])

cmp_dt_new_sql = "select " + field_new + " from " + tb_new + ";"

cmp_dt_old_sql = "select " + field_old + " from " + tb_old + ";"

logging.debug(cmp_dt_new_sql)

logging.debug(cmp_dt_old_sql)

cursor_new.execute(cmp_dt_new_sql)

cursor_old.execute(cmp_dt_old_sql)

new_dt = cursor_new.fetchall()

old_dt = cursor_old.fetchall()

logging.debug(list(new_dt))

logging.debug(list(old_dt))

count = 0

for item in old_dt:

if item in new_dt:

pass

else:

logging.error(tb_new + "新表中未找到:" + str(item))

count += 1

logging.error("总数: %d" % count)

logging.error("\n\n")

# 关闭游标

cursor_old.close()

cursor_new.close()

return

# 测试表

test_table_field = [["field_new"], ["field_old"]]

db_diff("test_table", "test_table", test_table_field)

# 关闭数据库连接

conn_old.close()

conn_new.close()

python数据对比校验_Python对比数据库两张表是否一致相关推荐

  1. python两张表对比不同_Python对比数据库两张表是否一致

    工作中我们经常需要对比数据库中两张表的数据是否有差异,以下代码通过pymsql对两张表的数据进行简单对比,可以记录新旧表的数据总数,以及两张表中有差异的数据. 应用场景:旧表中数据迁移到新表 运行结果 ...

  2. mysql不同服务器数据库查询_不同服务器不同数据库两张表连接查询使用经验

    使用SQL语句连接查询位于两个不同的服务器不同的数据库中的两张表,最初将SQL语句写成以下形式select*fromProduct pinnerjoin opendatasource('SQLOLED ...

  3. python相似图片识别_Python+Opencv识别两张相似图片

    Python+Opencv识别两张相似图片 在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话 ...

  4. python识别图片中数字_Python Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...

  5. oracle两张表 比较好,比较Oracle两张表的数据是否一样

    比较Oracle两张表的数据是否一样 爱搞机 2008-10-21 11:00 在某些情况下,我们会需要比较两张表的数据是否一样. 假设有两张表A与表B他的字段相同,但是当中的数据可能不同,而且有些字 ...

  6. mysql 去重主表数据,两张表结构相同数据(百万级别)

    这里写自定义目录标题 mysql 去重主表数据,两张表结构相同数据(百万级别) 得到两张表的并集,查出主表在并集中出现的主键id 删除主表中重复的id,根据上面sql查出的数据 2.一部删除到位 my ...

  7. MySQL中对比两张表是否有不同数据

    1.使用union all关联两张表,完事使用临时表或者说派生表的方式来进行数据对比. SELECT t1.pk, t1.c1 FROM t1 UNION ALL SELECT t2.pk, t2.c ...

  8. oracle 两表两列数据对比_【SQL】根据两列信息,整合两张表数据

    两张表数据如下: --2017年 id college score A001 北京大学 670 A002 中国人民大学 646 A003 清华大学 664 A003 清华大学         (定向) ...

  9. Oracle 对比两张表的数据是否一致

    使用 minus 关键字(minus:差别,缺少) 有两张表CHECK_CITY_1和CHECK_CITY_2,现在要互相对比一下,两个表数据的差异,(即A中有哪些B里没有,B中有哪些A中没有) se ...

最新文章

  1. C++ STL: lower_bound 和 upper_bound
  2. RTL设计推荐的各步骤 推荐工具 适合VHDL verilog
  3. python 模块与包
  4. MUI多端发布开发指南(终于把MUI的使用场景说清楚了)
  5. 分享在MVC3.0中使用jQuery DataTable 插件
  6. Flink架构及工作原理
  7. java获取ip地址不重复,如何在android(Java)中验证Ip地址[重复]
  8. Mybatis整合spring
  9. 电脑浏览器打不开html文档,电脑浏览器打不开本地html文件
  10. 斐讯n1刷linux配置wifi,斐讯N1刷CentOS7最简操作
  11. could not find driver (SQL: select * from information_schema.tables where table_schema = oliver and
  12. Git error : bad signature 0x00000000 fatal: index file corrupt
  13. android拷机工具,如何科学理解麒麟9000的拷机功耗?
  14. Amlogic 4K UI显示
  15. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
  16. 实时障碍更新 局部路径寻优算法 矢量地图数据 局部路径规划解集_自动驾驶近期行为预测和规划的一些文章介绍(下)...
  17. 黑马瑞吉外卖之菜品的启售停售
  18. gzip和gunzip
  19. modelsim脚本仿真(二)带quartus的IP核工程仿真
  20. [剑指Offer]Q9_栈和队列(用两个栈实现队列)

热门文章

  1. Unity中的混合光照
  2. 报错解决——ValueError: row index was 65536, not allowed by .xls format
  3. error An unexpected error occurred: “https://registry.npmjs.org/react: ETIMEDOUT“.
  4. 大数据基础数据之中国法定节假日API
  5. 码流、单码流、双码流、多码流
  6. 2021招银网络提前批笔试编程题C++
  7. Python 课程学习笔记(5)列表 [ ] lst
  8. 深度学习【注意力机制(Attention)原理和实现】
  9. Electron加密打包文件
  10. bandizip没有右键菜单解决办法