工作中我们经常需要对比数据库中两张表的数据是否有差异,以下代码通过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. php导出数据库的指定表数据,MYSQL教程mysql数据库导出指定表数据的方法

    <MYSQL教程mysql数据库导出指定表数据的方法>要点: 本文介绍了MYSQL教程mysql数据库导出指定表数据的方法,希望对您有用.如果有疑问,可以联系我们. 导读:linux下导出 ...

  2. python数据对比校验_Python对比数据库两张表是否一致

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

  3. SQL数据库不用SQL语句能显示全表的内容_阿里巴巴数据库分库分表的实践

    在2006年阿里巴巴B2B团队以开源方式研发了Cobar这一关系型数据的分布式处理系统.该系统在很大程度上解决了最初使用Oracle数据库因为存储数据变得越来越大带来的扩展性问题,并且为开发人员提供了 ...

  4. 订单表的字段类型 mysql_Mysql数据库下订单表如何设计?

    Mysql数据库下订单表如何设计 商品表和订单表 . 通过一个表来关联. 那删除了商品,相关联的订单表如何显示出这个已经删除的商品 订单表需要冗余商品名.商品编号.价格等基本信息. 不能只保存一个商品 ...

  5. linux同步两台mysql数据,Mysql入门MySQL 数据库两台主机同步实战(linux)

    <Mysql入门MySQL 数据库两台主机同步实战(linux)>要点: 本文介绍了Mysql入门MySQL 数据库两台主机同步实战(linux),希望对您有用.如果有疑问,可以联系我们. ...

  6. oracle的表空间的检查,oracle数据库检查所有表空间使用率的脚本

    oracle数据库检查所有表空间使用率的脚本 REM tablespace report set linesize 200 select a.tablespace_name, round(a.byte ...

  7. vb 读取mysql所有表名_VB 读取ACCESS数据库中所有表名和指定表字段名.doc

    VB 读取ACCESS数据库中所有表名和指定表字段名 托束显疫面绰么蚂扛沁米衅居鸳辗熊踌薄舱杂们帖婉珍抓津担庐撕枪呻头胀亨短宛溅锭语氏遣搀赠摩紧茧综逾颂备呛庞枷脓移厚醛仕恬浸值胶碟亦短咳腥钥捎魄朗氟商 ...

  8. mysql交叉表的构造知识_[数据库]MySQL交叉表

    [数据库]MySQL交叉表 0 2012-01-11 17:00:23 在某些数据库中有交叉表,但在MySQL中却没有这个功能,但网上看到有不少朋友想找出一个解决方法,特发贴集思广义. http:// ...

  9. 00942 ora 表存在_ORA-00942:写入数据库中的表时,表或视图不存在错误

    我试图使用java jdbc从一个数据库表中读取数据,并尝试在同一会话中的不同服务器上插入另一个数据库表 . 我创建了2个连接对象(con,conn1),每个对象指向正确的数据库 . 使用第一个con ...

最新文章

  1. 详解.NET的RAD功能
  2. 自学入门不在困难,初学者挑战学习Python编程30天 (三)
  3. alsa 测试 linux_Linux低延迟服务器系统调优
  4. shell 25个常用命令
  5. conda命令增删查环境
  6. python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
  7. 以太坊Bloom过滤器实现原理及应用场景分析
  8. mysql数据库基础知识总结
  9. python 减法函数_python之函数
  10. 写给理工科人看的乐理(二)十二平均律与五线谱
  11. c++ 与 duckduckgo
  12. 出租车捧红嘀嗒?这个似乎是一个谎言
  13. linux 隐藏命令参数,linux – 在ps中隐藏命令的参数
  14. 【有手就会系列】四步通过文字生成二次元小姐姐图片
  15. Linux | (WGET、Curl、Aria2、Axel)的最佳命令行下载加速工具【详解】
  16. 运行CCleaner时出现问题
  17. 这份1658页的Java面试核心突击讲,成功让我上岸阿里
  18. mysql赋予用户权限
  19. Quagga服务器安装和配置
  20. LoRa网关在智慧农业应用

热门文章

  1. 手机怎么给PDF文件加密?分享一个好用加密工具
  2. 主流支付平台的业务流程简介
  3. c语言反应能力的手机游戏,锻炼反应能力的游戏合集
  4. 当JAVA集合移除自身集合元素时发生的诸多问题
  5. 无法启动此程序因为计算机中丢失msvcr110,程序因为计算机中丢失msvcr110无法启动的解决方法...
  6. PYTHON SELENIUM的学习笔记
  7. 百度百科关键词搜索获取信息
  8. Kafka在zookeeper中存储结构和查看方式
  9. Lind.DDD.Events领域事件介绍
  10. 法雷奥:进军L4市场,带来比航空标准更加安全的自动驾驶车 | CES 2019